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

Can't access user details with get_user_by or wp_get_current_user function in WordPress on wp_login 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

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

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

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

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

如果这不起作用,您应该在 codex 上获取一个,或者 here 它表明您可以自己对用户进行身份验证,然后您可以构建用户数据来为您自己的代码进行操作。

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

希望添加该行会有所不同。

似乎以上两种方法都不足以确保登录会话对脚本可用,因此需要对函数进行小的更改以通过 [=25 使用函数可用的数据=].

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