问题描述

我需要获得与用户相关联的角色 – 而不是 「当前登录的用户」 。

我正在使用 Buddypress(不是这应该是关于这个问题的性质),我在 bp_members()循环。

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

谢谢。

最佳解决方案

使用用户 ID 和 WP_User

$user = new WP_User( $user_id );
print wp_sprintf_l( '%l', $user->roles );

Update

/**
 * 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
)

次佳解决方案

如果 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);

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。