В WordPress по умолчанию есть набор ролей пользователей с определёнными правами: Администратор, Редактор, Автор, Участник и Подписчик. Но часто возникает необходимость создать свои собственные роли с уникальными правами или расширить возможности существующих. В этой статье мы подробно рассмотрим, как добавить дополнительные роли и права в WordPress с практическими примерами кода.
Зачем создавать новые роли и права в WordPress
Стандартные роли подходят для большинства сайтов, но иногда нужно настроить доступ под конкретные задачи. Например, можно создать роль «Модератор комментариев», которая сможет только управлять комментариями без доступа к публикациям. Или роль «Контент-менеджер», которая может редактировать и публиковать записи, но не имеет доступа к настройкам сайта.
Создание кастомных ролей позволяет гибко управлять возможностями пользователей, повышая безопасность и удобство администрирования.
Кроме того, такие роли востребованы при разработке сайтов под клиентов, когда нужно ограничить функционал и не раскрывать админскую часть полностью.
Как добавить новую роль в WordPress: функция wplist_add_custom_role
Для создания новой роли используется функция add_role. Она принимает три параметра: уникальный ключ роли, имя для отображения и массив прав (capabilities).
Пример создания роли «Модератор комментариев» с минимальным набором прав:
function wplist_add_custom_role() {
add_role('comment_moderator', 'Модератор комментариев', [
'read' => true,
'edit_posts' => false,
'moderate_comments' => true,
'edit_comments' => true,
'delete_comments' => true
]);
}
register_activation_hook(__FILE__, 'wplist_add_custom_role');В этом примере роль получает право читать сайт и модерацию комментариев, но не может создавать или редактировать записи.
Обратите внимание, что функцию register_activation_hook нужно использовать в плагине, чтобы роль добавлялась при активации плагина. Если вы хотите добавить роль в functions.php темы, просто вызовите функцию напрямую.
Как добавить дополнительные права к существующей роли
Иногда нужно не создавать новую роль, а расширить существующую. Для этого используется объект WP_Role и методы add_cap и remove_cap.
Пример добавления права управлять плагинами к роли Редактор:
function wplist_add_caps_to_editor() {
$role = get_role('editor');
if ($role) {
$role->add_cap('activate_plugins');
$role->add_cap('edit_plugins');
}
}
add_action('init', 'wplist_add_caps_to_editor');Важно помнить, что добавленные права сохраняются в базе данных, поэтому их нужно удалять вручную или через специальный скрипт, если они больше не нужны.
Популярные плагины для управления ролями и правами
Если не хотите вручную писать код, можно использовать плагины, которые значительно упрощают управление ролями:
- User Role Editor – самый популярный плагин для создания и редактирования ролей и прав. Позволяет добавлять, удалять и изменять capabilities через интерфейс.
- Members – плагин от MemberPress с простым UI для управления ролями, а также возможностью создавать приватный контент.
- Advanced Access Manager – мощный инструмент для детального контроля доступа на уровне ролей, пользователей и контента.
Все эти плагины упрощают задачу, но если нужна полная кастомизация и интеграция с собственным функционалом, лучше использовать код.
Пример: создание пользовательской роли с дополнительным интерфейсом настроек
Давайте создадим роль «Контент-менеджер», которая может управлять записями и страницами, но не имеет доступа к настройкам сайта.
function wplist_create_content_manager_role() {
add_role('content_manager', 'Контент-менеджер', [
'read' => true,
'edit_posts' => true,
'edit_pages' => true,
'publish_posts' => true,
'publish_pages' => true,
'delete_posts' => true,
'delete_pages' => true,
'edit_others_posts' => true,
'edit_others_pages' => true,
'delete_others_posts' => true,
'delete_others_pages' => true,
// Запрет доступа к настройкам
'manage_options' => false
]);
}
register_activation_hook(__FILE__, 'wplist_create_content_manager_role');Чтобы скрыть меню «Настройки» для этой роли, добавим фильтр в админку:
function wplist_remove_settings_menu() {
if(current_user_can('content_manager')) {
remove_menu_page('options-general.php');
}
}
add_action('admin_menu', 'wplist_remove_settings_menu', 999);Так мы сделаем интерфейс удобнее и безопаснее для пользователей с ролью «Контент-менеджер».
Как протестировать созданные роли и права
После добавления новой роли или расширения существующей важно проверить, что права работают корректно. Для этого создайте нового пользователя с нужной ролью и попробуйте выполнить различные действия:
- Создавать, редактировать и удалять записи и страницы.
- Управлять комментариями (если это предусмотрено).
- Открывать страницы настроек и плагины (доступ должен быть ограничен, если вы это задали).
- Проверить доступ к административным меню и инструментам.
Если что-то не работает, проверьте права в коде и не забывайте, что права могут конфликтовать с плагинами безопасности или кэширования.
Выводы
Добавление и настройка ролей и прав — важная часть гибкой настройки WordPress под задачи проекта. Используйте функцию add_role для создания новых ролей и get_role()->add_cap() для расширения прав. Для удобства можно использовать популярные плагины, но код даёт максимальную свободу и контроль.
Не забывайте тестировать роли на тестовом сайте или отдельном пользователе, чтобы избежать ошибок и проблем с безопасностью.
Если хотите узнать больше о кастомных решениях для WordPress, советую ознакомиться с плагином User Role Editor — он отлично интегрируется с любыми проектами и расширяет стандартные возможности.