2016-09-01 4 views
0

WordPressサイトにログインするときにユーザーの名前と電子メールを取得する必要があるプラグインを構築しています。私はWordPressでget_user_by()wp_get_current_user()の両方の機能を使用しようとしましたが、役に立たなかった。私はwp_loginアクションフックを使用しています。wp_loginフックでWordPressのget_user_by関数またはwp_get_current_user関数でユーザーの詳細にアクセスできません

コードの例:

function send_login_notification() 
{ 
    $user_info = get_user_by('id', get_current_user_id()); 
    $user_name = ucfirst($user_info->user_login); 
    $user_email = $user_info->user_email; 

    [...] 

} 

add_action('wp_login', 'send_login_notification'); 

は、しかし、私は時々次のエラーを提示、常にではないのです。

Notice: Trying to get property of non-object in [file path] on line 48 

Notice: Trying to get property of non-object in [file path] on line 49 

私はリフレッシュした場合、チャンスはそれが動作しますが、これ奇妙です。それは本当にヒットアンドミスです。

+0

私はこの特定のフックの経験はありませんが、セッション/クッキーを使用してユーザーの詳細を保持しているようです。この場合、セッションが作成または使用可能になる前に、最初のコールが行われています。ただし、リフレッシュ時にセッションが使用可能で、コードが機能します。 –

答えて

1

私はこの特定のフックの経験はありませんが、ユーザーの詳細を保持するためにセッション/クッキーを使用しているようです。この場合、セッションが作成または使用可能になる前に、最初のコールが行われています。ただし、リフレッシュ時にセッションが使用可能で、コードが機能します。

可能な限り遅く発生するようにアクションの優先順位を設定しようとしましたか?ほとんどのイベントは10の優先順位を持っていますので、それ以降はあなたの行動をどこかに設定すると仕事ができます。

add_action('wp_login', 'send_login_notification', 15, 2); 

問題が解決しない場合は、それは、あなたがあなた自身のコードを操作するためのユーザデータを構築することができ、ユーザーを自分で認証したことを示しhereコーデックスで取るか、または必要があります。

$user = wp_authenticate($username, $password); 

うまくいけば、その行を追加すると違いが生じます。

ログインセッションがスクリプトで使用できるようにするには、上記の方法では十分ではなかったようです。したがって、wp_loginを使用して関数で使用できるデータを使用するには、関数を少し変更する必要がありました。

function send_login_notification($username, $password) 
{ 
    $user_info = get_user_by('login', $username); 
関連する問題