通过用户ID获取WordPress中的用户角色

57

我需要通过用户ID来检查他们的角色。我找到了current_user_can()检查方式,但这仅适用于已登录的用户。如果该用户不是当前用户,我该如何进行检查?我正在使用电话订购系统,但它使用管理员/特定帐户为其他人下订单。


如描述的那样,我使用一种特殊的电话订单系统。有时管理员会代表特定用户下订单。当这种情况发生时,我需要检查原始用户的角色。 - Tristan .L
4个回答

99

要检查用户是否具有特定角色,您需要获取他们的角色列表并查看是否列出了该角色。

示例函数:

function user_has_role($user_id, $role_name)
{
    $user_meta = get_userdata($user_id);
    $user_roles = $user_meta->roles;
    return in_array($role_name, $user_roles);
}

用法示例:

$user_is_subscriber = user_has_role(get_current_user_id(), 'subscriber');

42
$user_meta = get_userdata($user_id); $user_roles = $user_meta->roles; if (in_array("subscriber", $user_roles)){} 这段代码用于检查用户角色是否为订阅者。 - Tristan .L

29

在你继续之前需要知道的信息:

  • 无法直接通过ID获取用户角色。
  • 你可以获取分配给用户的所有角色。

让我们获取所有角色并检查是否存在你感兴趣的角色。

<?php

// Get the user object.
$user = get_userdata( $user_id );

// Get all the user roles as an array.
$user_roles = $user->roles;

// Check if the role you're interested in, is present in the array.
if ( in_array( 'subscriber', $user_roles, true ) ) {
    // Do something.
    echo 'YES, User is a subscriber';
}

3

你好,尝试使用这个最优代码。

if (get_userdata($post->post_author)->roles[0] == 'your_specified_role'){
   echo 'role exist';
}else{
   echo 'role does not exist';
}

6
WordPress中的用户可以拥有多个角色,因此正确的断言方式是in_array - Lucas Bustamante
@LucasBustamante - 你的意思是一个用户可以拥有多个能力,但只有一个角色,比如编辑者吗? - undefined

-3
$user_meta = get_userdata($user_id);
$user_roles = $user_meta->roles;

if ( in_array( 'administrator', $user_roles, true ) ) {
    //echo User is a administrator';
}

11
你的回答非常类似于3个月前Ahmad的回答。这个回答有什么新的东西吗? - Ivar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接