GET_CURRENT_USER_ID()返回0?

时间:2014-10-04 作者:PHP Learner

我正在尝试在WordPress中获取当前登录用户的id。我使用了以下代码:

function users_list()
{
   global $current_user;
   $current_user =  wp_get_current_user();
   echo \'User ID: \' . $current_user->ID ;
   print_r($current_user);

}
上述代码返回空结果,如下所示:

WP_User Object ( [data] => [ID] => 0 [caps] => Array ( ) [cap_key] => [roles] => Array ( ) [allcaps] => Array ( ) [filter] => )

4 个回复
最合适的回答,由SO网友:Justin Bell 整理而成

路过wp_get_current_user() Codex中的信息,函数利用全局$current_user 对象,如有必要,请在使用前对其进行初始化。正如其他人所说,get_current_user_id() 在后端使用此函数。

考虑/wp-includes/user.php, 第323-327行(此代码的函数定义)。在末尾,返回值为return ( isset( $user->ID ) ? (int) $user->ID : 0 ); —此代码将返回0 如果登录用户不知何故不可用。

使用init或任何后续操作调用此函数。在操作之外调用它可能会导致麻烦。有关详细信息,请参见#14024。

这来自以下文档:wp_get_current_user. 如果您在模板中使用此代码,您可以确信init 已经打过电话了。但是,如果您只是随机获取之前的用户信息init 调用操作时,您将无法获取当前用户。这解释了为什么在将这些操作添加到函数中时会获得用户ID。php(因为这些操作发生在init), 然而,对于您的原始代码,您何时调用它并不清楚。

请参阅Plugin API 第页,了解调用这些不同操作的顺序的一般概念。

SO网友:Danish Jamil

始终使用get_current_user_id(); 在下面init 行动

以下是示例:

add_action(\'init\', \'myFunction\');

function myFunction(){

 $user_ID= get_current_user_id();   

   echo"User number $user_ID is loggedin";
}

SO网友:Philipp

正如其他人所提到的:如果过早调用函数,它将返回值0

检查是否“太早”的一个好方法是进行这种检查:

// Do NOT check for action \'set_current_user\', but for \'init\'!!
if ( ! did_action( \'init\' ) ) {
    _doing_it_wrong( __FUNCTION__, \'get_current_user_id() called before the init hook\', null );
}
$user_id = get_current_user_id();

The reason why we do not use did_action(\'set_current_user\') is:

如果调用了其他代码/插件get_current_user_id() 太早了,它会触发钩子set_current_user 运行。然而,目前的用户数据在这一点上是不正确的,因此依赖这个动作挂钩不是一个好主意-只有当init 执行后,我们可以确保有正确的用户!

SO网友:Syed Waqas Bukhary

For wordpress versions > 3.4:

使用:

$current_user_id= get_current_user_id();
For wordpress versions < 3.4:

文档说明,如果版本低于3.4,请将其与init一起使用:

add_action(\'init\', \'get_your_current_user_id\');
function get_your_current_user_id(){
        $your_current_user_id= get_current_user_id();
        //do something here with it
}
您可以检查文档:wp_get_current_user

结束

相关推荐

MANAGE_USERS_CUSTOM_COLUMN筛选器触发的函数不起作用

我正在尝试添加一个自定义列un users。php,但它保持为空。我已经成功地在用户管理页面中添加了一列,在我的主题函数中使用了此代码。php文件:function add_user_test_column( $columns ) { $columns[\'test1\'] = \'Test\'; return $columns; } add_filter( \'manage_users_columns\', \'add_user_test_column\