Как проверить, находится ли пользователь в определенной роли?

У меня есть довольно специфическое требование, чтобы показать другой текст в метке поля на странице профиля пользователя на основе роли текущего пользователя. Я не могу понять, как проверить, является ли текущее использование «автором».

Я ищу функцию вроде:

is_user_in_role($user, "author");

Я предполагаю, что это довольно просто, но я слишком долго искал ответа без ответа, поэтому решил, что отправлю его здесь.

42 голоса | спросил jessegavin 8 WedEurope/Moscow2010-12-08T18:47:46+03:00Europe/Moscow12bEurope/MoscowWed, 08 Dec 2010 18:47:46 +0300 2010, 18:47:46

4 ответа


81

Если вам это нужно только для текущего пользователя 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
}
ответил Rarst 8 WedEurope/Moscow2010-12-08T18:54:09+03:00Europe/Moscow12bEurope/MoscowWed, 08 Dec 2010 18:54:09 +0300 2010, 18:54:09
8

Я искал способ получить роль пользователя, используя идентификатор пользователя. Вот что я придумал:

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 ) );
}
ответил Stephen M. Harris 11 J0000006Europe/Moscow 2012, 18:18:41
1

Вы также можете создать новый пользовательский объект:

$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 была удалена, но она больше не является доступной функцией.

ответил sMyles 16 42017vEurope/Moscow11bEurope/MoscowThu, 16 Nov 2017 03:44:06 +0300 2017, 03:44:06
0

Вот функция, которая принимает пользователя и роль для большей гибкости:

function my_has_role ($ user, $ role) {
  Роли $ role = $ user->
  return in_array (роли $ role, (array) $ user->);
}

if (my_has_role ($ user, 'some_role')) {
  //делать что-то
}
ответил Ben 29 32017vEurope/Moscow11bEurope/MoscowWed, 29 Nov 2017 02:05:00 +0300 2017, 02:05:00

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132