How to get role of user

时间:2012-07-18 作者:frank13

我需要获取与用户关联的角色,而不是“当前登录的用户”。

我使用的是Buddypress(这与这个问题的性质无关),我在bp_members()

如何在任何给定时间检索循环中报告的用户的角色?

谢谢

3 个回复
SO网友:fuxia

使用用户ID和WP_User:

$user = new WP_User( $user_id );
print wp_sprintf_l( \'%l\', $user->roles );
更新
/**
 * Get user roles by user ID.
 *
 * @param  int $id
 * @return array
 */
function wpse_58916_user_roles_by_id( $id )
{
    $user = new WP_User( $id );

    if ( empty ( $user->roles ) or ! is_array( $user->roles ) )
        return array ();

    $wp_roles = new WP_Roles;
    $names    = $wp_roles->get_names();
    $out      = array ();

    foreach ( $user->roles as $role )
    {
        if ( isset ( $names[ $role ] ) )
            $out[ $role ] = $names[ $role ];
    }

    return $out;
}
用法示例:

print \'<pre>\' 
    . htmlspecialchars( 
        print_r( wpse_58916_user_roles_by_id(1), TRUE ) 
        ) 
    . \'</pre>\';

Array
(
    [administrator] => Administrator
)

SO网友:chrisguitarguy

如果bp_members 返回的数组WP_User 对象,每个对象都应有一个属性roles 包含用户角色数组的。

否则,您可以使用get_user_meta 对于密钥wp_capabilities, 将返回role => capability 配对:

<?php
$caps = get_user_meta($user->ID, \'wp_capabilities\', true);
$roles = array_keys((array)$caps);

SO网友:Olga Farber

据我所知,这可能多年来有所改变,但现在不是了\'wp_capabilities\'. 我查看了核心WP文件,了解了它们现在的工作方式,并找到了一个新的解决方案。下面是我现在使用的代码:

global $wpdb;
$cap = get_user_meta( $wp_user_id, $wpdb->get_blog_prefix() . \'capabilities\', true );
$cap 然后作为关联数组出现,例如:

{
    "administrator": true
}

{
    "subscriber": true
}
因此,在您的情况下,您可能应该获得数组的键:

$caps_array = array_keys( $cap );
然后从中获得一切。我需要查看用户是否具有管理员角色,因此我选中了:

if ( is_array( $cap ) && !empty( $cap[\'administrator\'] ) ) { return true; }
我有一个用户ID,而不是整个WP_User 对象,我不想使用任何会创建user 对象我查过了,get_user_meta 直接转到db来检查这个精确的参数,因此这应该是最快的和资源方面的路由。

结束

相关推荐