Answers:
如果仅当前用户需要,则current_user_can()
同时接受角色和功能。
更新:current_user_can()
不再保证将角色名称传递给(请参阅#22624)。相反,您可能希望检查用户角色:
$user = wp_get_current_user();
if ( in_array( 'author', (array) $user->roles ) ) {
//The user has the "author" role
}
我正在寻找一种使用用户ID来获取用户角色的方法。这是我想出的:
function get_user_roles_by_user_id( $user_id ) {
$user = get_userdata( $user_id );
return empty( $user ) ? array() : $user->roles;
}
然后,is_user_in_role()
可以像下面这样实现一个函数:
function is_user_in_role( $user_id, $role ) {
return in_array( $role, get_user_roles_by_user_id( $user_id ) );
}
在用户对象上调用角色$user->roles
不会返回所有角色。以下是查找用户是否具有角色或能力的正确方法。(这在wp 2.0.0及更高版本中有效。)以下函数与用户ID配合使用,您可以通过以下方式获取当前用户ID:$current_user_id = get_current_user_id();
/**
* Returns true if a user_id has a given role or capability
*
* @param int $user_id
* @param string $role_or_cap Role or Capability
*
* @return boolean
*/
function my_has_role($user_id, $role_or_cap) {
$u = new \WP_User( $user_id );
//$u->roles Wrong way to do it as in the accepted answer.
$roles_and_caps = $u->get_role_caps(); //Correct way to do it as wp do multiple checks to fetch all roles
if( isset ( $roles_and_caps[$role_or_cap] ) and $roles_and_caps[$role_or_cap] === true )
{
return true;
}
}