我正在寻找一个类似的函数:
is_user_in_role($user, "author");
我想这很简单,但是我搜索了太长时间却没有答案所以我想将其发布在这里。
#1 楼
如果仅当前用户需要此功能,则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
}
#2 楼
我正在寻找一种使用用户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 ) );
}
评论
我可以很好地工作,以将第一个角色分配给用户。
– Q Studio
2012年10月10日19:07
那么分配给用户的所有角色呢?
– Vishal Kumar Sahu
17年4月10日在7:14
@Vishal Kumar,这将检查分配给用户的所有角色。
–斯蒂芬·哈里斯(Stephen M. Harris)
17年4月10日在17:34
此功能不存在,不确定它是旧的还是什么,但是您应该使用上面的答案或我在下面发布的答案
–迈尔斯
17年11月16日在0:41
#3 楼
您也可以只创建一个新的用户对象:$user = new WP_User( $user_id );
if ( ! empty( $user->roles ) && is_array( $user->roles ) && in_array( 'Some_role', $user->roles ) ) {
return true;
}
不知道删除了哪个版本的
get_user_roles_by_user_id
,但是它不再可用。评论
当我必须调用WP_User类的其他方法时,这很方便。
–贾斯汀·沃特斯(Justin Waulters)
19-09-25在23:18
#4 楼
这是一个接受用户和角色以提高灵活性的功能:function my_has_role($user, $role) { $roles = $user->roles; return in_array($role, (array) $user->roles); } if(my_has_role($user, 'some_role')) { //do stuff }
#5 楼
用户对象$user->roles
上的调用角色不会返回所有角色。以下是查找用户是否具有角色或能力的正确方法。 (这适用于wp 2.0.0及更高版本。)以下功能与用户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;
}
}
获取当前用户ID。
#6 楼
这是旧文章,但是这是一个适用于所有WordPress版本的通用功能。if(!function_exists('is_user')):
function is_user ($role=NULL, $user_id=NULL)
{
if(empty($user_id)){
$user = wp_get_current_user();
} else {
if(is_numeric($user_id) && $user_id == (int)$user_id) {
$user = get_user_by('id', (int)$user_id);
} else if(is_string($user_id) && $email = sanitize_email($user_id)) {
$user = get_user_by('email', $email);
} else {
return false;
}
}
if(!$user) return false;
return in_array( $role, (array)$user->roles, true ) !== false;
}
endif;
使用此功能,您可以按角色或按用户ID /电子邮件搜索已登录的用户。还接受用户角色数组。
评论
我知道这篇帖子已经很久以前了,但是如果有人碰巧来到这里...请再次查看current_user_can()的文档->“不要将角色名称传递给current_user_can(),因为不能保证正常工作(请参阅#22624)。相反,您可能希望尝试由AppThemes组合使用的check user role功能。” (codex.wordpress.org/Function_Reference/current_user_can)
–世界上最好的程序员
2014年1月28日在7:04
^ if语句中缺少括号
–阿贾希德
2015年6月4日在6:44
@Aajahid编辑:)
–稀有
15年6月4日在7:52
如果不使用多站点,我仍然更喜欢current_user_can('editor')的简单性
–法律
1月25日19:37