2017-06-09 6 views
0

enter image description here fb loginと統合されたログインページを作成しました。ユーザーがパスワードを忘れると、ユーザー名の入力を求めるページにリダイレクトされます。送信ボタンをクリックすると、yuがfbでログインし、plsがfbパスワードを変更するというエラーメッセージが表示されます。add_filter関数は、WordPressのヘッダファイルのロード前に実行されます

これを達成するために、私はadd_filter "allow_password_reset hook"を使用しました。しかし、ヘッダーファイルをロードする前にwhteverが実行されるように書かれ、出力がヘッダーファイルの上に表示されます。私は知っているすべてを試しましたが、それでも問題があります。ここに私のコードです:

function se_deny_password_reset() { 
    $allow = false; 
    showMessage("Error", true); 
    return $allow; 
} 
add_filter('allow_password_reset', 'se_deny_password_reset', 10, 2); 


function showMessage($message, $errormsg = false) 
{ 
    echo '<p><strong>' . $message . '</strong></p></div>'; 
} 
+0

はい、そのフィルタは非常に早いトンで実行されます(代わりにあなたはすでに場所に持っている機能のうち、このコードを使用してください):あなたが合うように、あなたは、順番にメッセージを表示することができ彼はWPを実行します。その時点で何もエコーしてはいけません。ちょうどFALSEを返します。何らかの理由でメッセージをエコーする必要がある場合は、 '$ allow'の状態をTRACKし、別のフック*でメッセージをエコーすることができます。 –

+0

私はfrのcmnt、ありがとう、しかし混乱している! vが変数の状態をどのように追跡できるか($ allow)。 – Jackson

答えて

0

注:

メッセージが表示したい場所あなたの質問を明確にしないので、これはそう、あなたがあなたの$allow変数の状態を追跡するために使用できるだけのパターンであり、

class MyPasswordClass { 

    /** 
    * Track the state of $allow. 
    * Change if desired in a class function like so: $this->allow = TRUE; 
    * 
    * @var bool 
    */ 
    private $allow = FALSE; 

    /** 
    * Constructor. 
    * Set up the action/filter hooks. 
    */ 
    public function __construct() { 
     add_filter('allow_password_reset', array($this, 'allow_password_reset'), 10, 2); 
     add_filter('retrieve_password_message', array($this, 'password_message'), 10, 4); 
    } 

    /** 
    * Hooks into WP 'allow_password_reset' filter. 
    * 
    * @param bool $allow 
    * @param int $user_id 
    * 
    * @return bool 
    */ 
    public function allow_password_reset($allow, $user_id) { 
     // If desired, change permission. Example: 
     // $this->allow = TRUE; 

     return $this->allow; 
    } 

    /** 
    * Hooks into WP 'retrieve_password_message' filter. 
    * Message that displays when user attempts to reset password. 
    * 
    * @param string $message 
    * @param string $key 
    * @param string $user_login 
    * @param object $user_data 
    * 
    * @return string 
    */ 
    public function password_message($message, $key, $user_login, $user_data) { 
     $message = 'My custom error message.'; 
     return $message; 
    } 
} 

// Instantiate the class so that the filters are set up/used 
new MyPasswordClass(); 
関連する問題