如何检查用户是否属于特定角色?

时间:2010-12-08 作者:jessegavin

我有一个非常具体的要求,根据当前用户的角色,在用户配置文件页面的字段标签中显示不同的文本。我似乎不知道如何检查当前的用法是否是“作者”。

我正在寻找以下函数:

is_user_in_role($user, "author");
我想这很简单,但我已经搜索了太长时间,没有找到答案,所以我想我会把它贴在这里。

7 个回复
最合适的回答,由SO网友:Rarst 整理而成

如果您只需要当前用户使用current_user_can() 接受角色和功能。

UPDATE: 将角色名称传递给current_user_can() 不再保证正常工作(请参阅#22624). 相反,您可能希望检查用户角色:

$user = wp_get_current_user();
if ( in_array( \'author\', (array) $user->roles ) ) {
    //The user has the "author" role
}

SO网友:Stephen M. Harris

我正在寻找一种使用用户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 ) );
}

SO网友:sMyles

您也可以只创建一个新的用户对象:

$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 已在中删除,但它不再是可用的函数。

SO网友:Syed Waqas Bukhary

调用用户对象上的角色$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;
       }
 }

SO网友:Ben

以下是一个接受用户和角色以获得更大灵活性的函数:

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
}

SO网友:Ivijan Stefan Stipić

这是一篇很老的帖子,但这里有一个通用的功能,可以用于所有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/电子邮件搜索登录的用户。还接受用户角色数组。

SO网友:tiago calado
if(current_user_can(\'administrator\')){
   code...
}
结束

相关推荐

WP-ADMIN似乎正在重定向

我的w-admin登录有一个奇怪的问题。这是从我升级到3.0以后才开始的,当我转到wp admin时,登录表单显示正常,但当我输入用户名并通过时,每次都会再次显示登录表单。使用密码恢复功能会导致电子邮件未找到错误。我知道用户名密码和电子邮件是正确的,b/c我可以访问mysql数据库,我可以看到值(至少用户名和电子邮件) 有人知道会出什么问题吗