Часто бывает нужно добавить в WordPress не стандартные роли, а создать свою, с уникальным набором прав. Это полезно, если вы хотите делегировать определённые возможности конкретным пользователям, например, редакторам новостей с ограниченными возможностями, модераторам комментариев или менеджерам магазина.
Что такое пользовательские роли и зачем они нужны в WordPress
Роль пользователя в WordPress — это набор прав (capabilities), который определяет, что конкретный пользователь может делать в административной части сайта. По умолчанию WordPress содержит несколько ролей, таких как Администратор, Редактор, Автор, Участник и Подписчик.
Однако, эти роли не всегда подходят для конкретных задач проекта. Например, если вы хотите, чтобы пользователь мог публиковать только определённые типы записей, но не имел доступа к настройкам сайта — нужна своя роль.
Создание кастомной роли позволяет детально настроить права и упростить управление пользователями, повысить безопасность и сделать интерфейс админки более понятным для конечных пользователей.
Создание пользовательской роли в WordPress с помощью функции wpexamples_add_custom_role
Для создания роли в WordPress используется функция add_role(). Рассмотрим пример создания роли «Контент-менеджер», которая сможет публиковать и редактировать записи, но не сможет менять настройки сайта.
function wpexamples_add_custom_role() {
add_role('content_manager', 'Контент-менеджер', array(
'read' => true,
'edit_posts' => true,
'publish_posts' => true,
'edit_published_posts' => true,
'delete_posts' => false,
'manage_options' => false
));
}
add_action('init', 'wpexamples_add_custom_role');Этот код добавляет новую роль с ограниченным набором функций. Важно добавить этот код один раз, например, при активации плагина, иначе роль будет добавляться при каждом запросе.
Рекомендация по активации роли при установке плагина
Лучше использовать хук register_activation_hook в плагине, чтобы роль добавлялась один раз:
function wpexamples_activate_plugin() {
wpexamples_add_custom_role();
}
register_activation_hook(__FILE__, 'wpexamples_activate_plugin');Как добавить и удалить права (capabilities) у существующей роли
Иногда нужно не создавать новую роль, а изменить права существующей. Например, добавить возможность управлять комментариями для роли «Автор».
Для этого используется объект WP_Roles и методы add_cap и remove_cap.
function wpexamples_modify_author_caps() {
$role = get_role('author');
if ($role) {
$role->add_cap('moderate_comments');
}
}
add_action('init', 'wpexamples_modify_author_caps');В этом примере авторы смогут модерировать комментарии. Аналогично можно удалять права через remove_cap.
Примеры полезных capabilities для пользовательских ролей
read— базовое право посещать админкуedit_posts— редактировать свои записиedit_others_posts— редактировать чужие записиpublish_posts— публиковать записиdelete_posts— удалять свои записиmoderate_comments— модерировать комментарииmanage_categories— управлять категориямиmanage_options— доступ к настройкам сайта
Как протестировать созданную роль и назначить её пользователю
После добавления роли в коде, зайдите в админку WordPress, в раздел «Пользователи» и создайте нового пользователя с ролью «Контент-менеджер». Если роль не появилась, попробуйте обновить пермалинки или очистить кеш.
Залогиньтесь под этим пользователем и проверьте, что доступны только те функции, которые вы задали. Если нужно изменить права — подправьте capabilities.
Плагины для управления ролями и правами в WordPress
Если вы не хотите писать код, есть несколько проверенных плагинов для управления ролями и правами:
- Members — мощный редактор ролей и возможностей с удобным интерфейсом.
- User Role Editor — простой и популярный плагин для редактирования ролей.
- Clearfy Pro — оптимизационный плагин, в том числе с расширенным управлением ролями и возможностями.
Как удалить пользовательскую роль
Если роль больше не нужна, её можно убрать с помощью функции remove_role(). Важно делать это аккуратно, чтобы не оставить пользователей без роли.
function wpexamples_remove_custom_role() {
remove_role('content_manager');
}
register_activation_hook(__FILE__, 'wpexamples_remove_custom_role');Удалять роль стоит только при деактивации плагина или когда вы уверены, что она больше не используется.