В WordPress стандартно есть несколько ролей пользователей: Администратор, Редактор, Автор, Участник и Подписчик. Иногда возникает задача вывести на сайте список пользователей с определённой ролью или отобразить роль конкретного пользователя. В этой статье мы подробно рассмотрим, как получить и отобразить пользовательские роли в WordPress, включая примеры кода для разработчиков.
Понимание системы ролей и возможностей WordPress
Роли в WordPress определяют, какие права и возможности есть у пользователя. Каждая роль состоит из набора возможностей (capabilities), например, возможность публиковать записи, редактировать страницы, управлять плагинами и т.д. Для работы с ролями используется класс WP_Roles и функции, связанные с пользователями.
Важно понимать, что роль пользователя — это строковое значение, которое хранится в мета-данных пользователя и доступно через объект WP_User.
Как получить роль текущего пользователя
Чтобы узнать роль текущего залогиненного пользователя, используется следующий код:
function wptool_get_current_user_role() {
if ( ! is_user_logged_in() ) {
return false; // Пользователь не авторизован
}
$user = wp_get_current_user();
if ( empty( $user->roles ) ) {
return false; // Роли нет
}
return $user->roles[0]; // Возвращаем первую роль
}Этот код подходит для случаев, когда пользователю назначена одна роль. Если ролей несколько, можно обработать массив $user->roles.
Пример вывода роли на фронтенде
Добавим в шаблон следующий код для отображения роли:
$role = wptool_get_current_user_role();
echo $role ? 'Ваша роль: ' . esc_html( $role ) : 'Вы не авторизованы';Вывод списка пользователей по ролям с пагинацией
Иногда нужно получить список всех пользователей с определённой ролью, например, показать всех редакторов на отдельной странице. Для этого используется класс WP_User_Query.
Пример функции для получения и отображения пользователей с ролью «редактор»:
function wptool_list_users_by_role( $role = 'editor', $number = 10, $paged = 1 ) {
$args = array(
'role' => $role,
'number' => $number,
'paged' => $paged,
'orderby' => 'display_name',
'order' => 'ASC',
);
$user_query = new WP_User_Query( $args );
if ( ! empty( $user_query->results ) ) {
echo '<ul>';
foreach ( $user_query->results as $user ) {
echo '<li>' . esc_html( $user->display_name ) . ' (' . esc_html( $user->user_email ) . ')</li>';
}
echo '</ul>';
} else {
echo 'Пользователи с ролью "' . esc_html( $role ) . '" не найдены.';
}
}Вызов функции:
wptool_list_users_by_role('editor', 10, 1);Для реализации пагинации нужно использовать параметр paged и передавать его из запроса GET или POST.
Создание шорткода для вывода пользователей по ролям
Чтобы удобно выводить список пользователей с нужной ролью в любом месте сайта, можно создать шорткод:
function wptool_shortcode_users_by_role( $atts ) {
$atts = shortcode_atts( array(
'role' => 'subscriber',
'number' => 5,
'paged' => 1,
), $atts, 'users_by_role' );
ob_start();
wptool_list_users_by_role( $atts['role'], (int) $atts['number'], (int) $atts['paged'] );
return ob_get_clean();
}
add_shortcode( 'users_by_role', 'wptool_shortcode_users_by_role' );Теперь можно использовать в контенте сайта:
[users_by_role role="editor" number="10" paged="1"]Работа с кастомными ролями
Если вы используете собственные роли, добавленные через плагины или вручную, код будет работать аналогично, просто укажите в параметре role имя вашей роли.
Пример добавления кастомной роли:
function wptool_add_custom_role() {
add_role( 'custom_manager', 'Менеджер', array(
'read' => true,
'edit_posts' => true,
'delete_posts' => false,
) );
}
add_action( 'init', 'wptool_add_custom_role' );После этого вы сможете выводить пользователей с ролью custom_manager через ранее описанные функции.
Использование плагина Clearfy для управления ролями
Для удобного управления ролями и возможностями стоит обратить внимание на плагин Clearfy. Он позволяет тонко настраивать права, оптимизировать сайт и устранить лишние возможности для ролей, снижая риски безопасности.
Заключение и рекомендации
Работа с ролями пользователей в WordPress — часто востребованная задача, особенно при создании сайтов с разными уровнями доступа. Использование классов WP_User и WP_User_Query позволяет гибко получать и отображать информацию о ролях и пользователях.
Для расширенного управления ролями, в том числе кастомными, рекомендуем использовать готовые решения, такие как плагин Clearfy, который дополнительно помогает оптимизировать безопасность и функциональность.