WordPress wp_Get_Current_User在刷新前返回空值

时间:2019-06-24 作者:Xthralls

我正在WordPress中开发一个网站,并创建自己的主题。作为主题的一部分,我有一个自定义用户登录。当用户登录时,表单操作会返回到自身,在页面的标题中,我有一个简单的脚本来确定用户是否登录。

虽然此脚本按预期运行,但我遇到的问题是尝试使用wp_get_current_user 函数,则返回的名称在初始加载时为空(尽管在刷新页面或迁移到新页面时会显示)。

我已经搜索了几个用户问题和文章,其中许多提到挂接init函数(例如this one), 但他们都没有提供更多的细节。我试图向init函数添加一个过滤器,但没有成功。

这是我处理登录的代码,位于标题的开头。php文件:

<?php
if (is_user_logged_in()) {
    $userLoggedIn = true;
    if (isset($_POST[\'spLogout\'])) {
        wp_logout();
        $userLoggedIn = false;
    }
} else {
    $userLoggedIn = false;
    if (isset($_POST[\'spLogin\'])) {
        $ax_user = $_POST[\'email\'];
        $ax_pswd = $_POST[\'pswd\'];
        $creds = array(
            \'user_login\'    => $ax_user,
            \'user_password\' => $ax_pswd,
            \'remember\'      => true
        );

        $user = wp_signon( $creds, false);

        if (is_wp_error($user)) {
            echo $user->get_error_message();
        } else {
            $userLoggedIn = true;
        }
    }
}

?>
在我的职能中。php文件,下面是钩子和函数:

add_filter(\'init\', \'ax_get_user_info\');
function avox_get_user_info() {
    if (is_user_logged_in()) {
        $currentUser = wp_get_current_user();
        $fName = $currentUser->user_firstname;
    }
    return $fName;
}
我希望能够加载用户信息,而不需要刷新页面。也许我做错了,我才刚刚开始了解WordPress中的挂钩和加载顺序,但任何建议都非常感谢。

1 个回复
最合适的回答,由SO网友:ChristopherJones 整理而成

您的标题。php文件将在init 行动如果希望在标头中运行逻辑。php文件,也许您可以先挂接到WordPress中稍后执行的另一个操作:

add_action(\'wp_head\', \'ax_get_user_info\');
function avox_get_user_info() {
    if (is_user_logged_in()) {
        $currentUser = wp_get_current_user();
        $fName = $currentUser->user_firstname;
    }
    return $fName;
}
init 很早就完成了wp_head 在标头中调用。php文件很可能是在其他逻辑被激发之后。您可以在这里看到,在get\\u header之前调用init,它调用您的头。php文件。

https://codex.wordpress.org/Plugin_API/Action_Reference

https://codex.wordpress.org/Plugin_API/Action_Reference/wp_head

希望有帮助!!