如何获得用户的角色


15

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

我正在使用Buddypress(这与问题的性质无关),我处于bp_members()循环中。

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

谢谢。

Answers:


17

使用用户标识和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
)

谢谢@toscho-似乎没有得到我所期望的。我有一个编辑器,一个空白/空值和bbp_participant。我期望看到Admin,Editor,Author或Subscriber,因为这些是我们使用的唯一角色。
frank13 2012年

@ frank13查看我的更新。
fuxia

2
感谢@toscho ...这是很多代码来获取我认为会更容易获得的数据值。
frank13 2012年

非常有帮助,谢谢!令人悲伤和困惑,为什么您不能更直接地访问用户的角色。“可以用户”功能的功能与大多数人想要的相反。
Mike

7

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

否则,您可以使用get_user_metakey wp_capabilities,它将返回一个role => capability成对数组:

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

$ roles最终是一个数组。我正在寻找$user->ID的角色。由于系统中没有用户,因此只有一个角色分配了多个角色。
frank13 2012年

$roles[0],完成。
chrisguitarguy 2012年

好的,谢谢@ChristopherDavis ... $ roles [0]为列表中的每个用户全面返回“ 0”
frank13'7

@chrisguitarguy $ roles [0]是否仍然有效?
T.Todua

0

据我了解,多年来可能发生了变化,但现在还没有'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直接进入数据库以检查该确切参数,因此这应该是最快的资源明智的选择。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.