使用wp_login挂钩上的WordPress中的get_user_by或wp_get_current_user函数无法访问用户详细信息

时间:2016-09-01 23:47:50

标签: php wordpress plugins hook

我正在构建一个插件,当他们登录到WordPress网站时需要获取用户名和电子邮件。我尝试在WordPress中同时使用get_user_by()wp_get_current_user()函数,但无济于事。我正在使用wp_login动作挂钩。

代码示例:

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

如果我刷新,它很可能会起作用,这很奇怪。它真的很棒。

1 个答案:

答案 0 :(得分:1)

我没有这个特定钩子的经验,但听起来它使用会话/ cookie来保存用户的详细信息。在这种情况下,您的第一个呼叫是在会话创建/可用之前发生的。但是,在刷新时会话可用且代码有效。

您是否尝试过设置行动的优先级以确保尽可能晚地发生?大多数事件的优先级为10,因此在此之后将行动设置在某个位置即可。

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

如果这不起作用,您应该使用codex或here它表示您可以自己对用户进行身份验证,然后您可以构建用户数据来操作您自己的代码。 / p>

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

希望添加该行会有所作为。

上述两种方法似乎都不足以确保脚本可以使用登录会话,因此需要对该函数进行少量更改,以便通过wp_login使用该函数可用的数据。

function send_login_notification($username, $password)
{
    $user_info = get_user_by('login', $username);