问题描述
我需要获得与用户相关联的角色 – 而不是 「当前登录的用户」 。
我正在使用 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。