我正在构建一个插件,当他们登录到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
如果我刷新,它很可能会起作用,这很奇怪。它真的很棒。
答案 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);