Как получить список пользователей по их роли?

4 мар. 2016 г., 07:10:49
Просмотры: 73K
Голосов: 20

Как можно получить список всех пользователей в WordPress по их роли или возможностям?

Например:

  • Отобразить all subscribers list в WordPress.
  • Отобразить all authors list в WordPress.
  • Отобразить all editors list в WordPress.
0
Все ответы на вопрос 4
1
36

Существует несколько способов сделать это, но наиболее правильный подход следующий.

<?php

$args = array(
    'role'    => 'Укажите здесь нужную роль пользователя.',
    'orderby' => 'user_nicename',
    'order'   => 'ASC'
);
$users = get_users( $args );

echo '<ul>';
foreach ( $users as $user ) {
    echo '<li>' . esc_html( $user->display_name ) . '[' . esc_html( $user->user_email ) . ']</li>';
}
echo '</ul>';

?>
4 мар. 2016 г. 07:10:49
Комментарии

Хотел добавить (так как мне потребовалось время, чтобы разобраться): для тех, кто пытается использовать это внутри шорткода (где нужно возвращать значение, а не выводить его), можно воспользоваться примером здесь, чтобы использовать буферизацию вывода.

Jon Fergus Jon Fergus
24 мая 2020 г. 01:54:48
0

Вот простой подход к группировке ролей.

$wp_roles = wp_roles();
$result   = count_users();

foreach ( $result['avail_roles'] as $role => $count )
{
    if ( 0 == $count )
        continue; //пропустить пустые роли

    $args = array(
        'role' => $role
    );

    $users = get_users( $args );
    $user  = array();
    for ( $i = 0; $i < $count ; $i++ )
        $user[] = esc_html( $users[ $i ]->display_name ); //показать отображаемое имя

    //вывод
    echo wp_sprintf( '<h2>%1$s</h2><ul><li>%2$s</li></ul>',
        esc_html( $wp_roles->role_names[ $role ] ),
        implode( '</li><li>', $user )
    );
}
4 мар. 2016 г. 15:37:57
0

Если вы работаете с ролями пользователей из плагина Ultimate Member, необходимо добавлять префикс "um_" к значению роли.

Например, если вы создали роль "Client" в плагине Ultimate Membership, то массив $args должен выглядеть так:

$args = array(
    'role'    => 'um_client',
    'orderby' => 'user_nicename',
    'order'   => 'ASC'
);
29 февр. 2020 г. 08:17:22
0

Дополняя ответ Raja, вы также можете написать вспомогательную функцию, которая будет выполнять эту задачу за вас:

<?php
# Этот код помещается в файл functions.php
function get_users_by_role($role, $orderby, $order) {
    $args = array(
        'role'    => $role,
        'orderby' => $orderby,
        'order'   => $order
    );

    $users = get_users( $args );

    return $users;
}
?>

Теперь для получения пользователей по конкретной роли вы можете просто использовать:

<?php $users = get_users_by_role('Ваша роль', 'user_nicename', 'ASC'); ?>
9 июл. 2019 г. 14:43:09