Answers:
使用用户标识和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
)
如果bp_members
返回WP_User
对象数组,则每个对象都应具有一个属性roles
,其中包含用户角色的数组。
否则,您可以使用get_user_meta
key wp_capabilities
,它将返回一个role => capability
成对数组:
<?php
$caps = get_user_meta($user->ID, 'wp_capabilities', true);
$roles = array_keys((array)$caps);
$user->ID
的角色。由于系统中没有用户,因此只有一个角色分配了多个角色。
$roles[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
直接进入数据库以检查该确切参数,因此这应该是最快的资源明智的选择。