2016-05-06 31 views
0

初めてのプラグインでプラグ可能な関数is_user_logged_in()をオーバーライドする際に問題が発生しました。 pluggable.phpのこの関数はif (!function_exists('...'))の中にラップされていますので、私のバージョンの関数が問題なく実行されることを期待していましたが、そうでないようです。WordPress:プラグインでプラグイン可能な関数をオーバーライドするときの問題

new session_auth(); 

class session_auth{ 

    public $sessionUSERNAME; // php session variable for username 

    public function __construct() { 

     $this->sessionUSERNAME = $_SESSION['simple_auth']['username']; // php session variable for username 

     add_filter('is_user_logged_in', array($this, 'is_user_logged_in'), 20); 
     add_filter('wp_title', array($this, 'wp_title'), 20) ; 

    } 

    function is_user_logged_in() { 
     return true; 
    } 

    public function wp_title($title) 
    { 
     return $title .'if this is displayed, the plugin is activated'; 
    } 

} 

wp_titleの私のバージョンが正常にワードプレスの1の代わりに実行されますが、ないis_user_logged_inの私のバージョンされています。私は何の誤りもありません。

このスクリプトで何が間違っていますか?

答えて

1

Wordpressのpluggable.phpコードから分かるように、is_user_logged_inにはfilterありません:

function is_user_logged_in() { $user = wp_get_current_user(); return $user->exists(); }

はあなたのファイルでis_user_logged_in()関数を作成する必要があり、クラスの中に入れていません。プラグインのどこかに入れてください(クラス内ではありません)。

function is_user_logged_in() { 
    return true; 
} 
+0

ありがとう、私はなぜ/どのようにフィルタが機能するのか誤解しているかもしれません。しかし、なぜそれをクラスの中に入れられないのですか?この特定の機能のために、それはrequieredされていませんが、プラグインのいくつかのpluggable.php機能をクラス内に持っていれば本当に役に立ちました。クラス内でこの作業を行う方法はありますか?いずれにせよ、ありがとう! – apatik

+0

クラス内の関数がクラスに属しているので、これまでどおりに動作するとは思いません。この記事でも同様の問題があります:https://github.com/DevinVinson/WordPress-Plugin-Boilerplate/issues/332とにかく、うれしい! – user1049961

+0

さて、私はこれを回避します。最後に、もし 'is_user_logged_in'で可能ではない間に、' wp_title'がクラス内に置かれた場合の動作はどうなりますか? – apatik

関連する問題