В WordPress по умолчанию есть несколько ролей пользователей, таких как Администратор, Редактор, Автор, Участник и Подписчик. Однако зачастую стандартных ролей недостаточно для реализации специфических сценариев управления доступом. В этой статье мы подробно разберем, как создать пользовательские роли и гибко управлять правами на вашем сайте WordPress.
Почему стоит создавать пользовательские роли в WordPress
Использование стандартных ролей подходит для большинства сайтов, но когда требуется тонкая настройка прав, например, для кастомных типов записей, плагинов или внутренних процессов, пользовательские роли становятся незаменимыми.
Преимущества создания своих ролей:
- Точная настройка доступа к функциям и контенту;
- Повышение безопасности, исключая лишние права;
- Удобство для крупных команд с разными задачами;
- Интеграция с кастомными плагинами и функционалом.
В следующих разделах рассмотрим, как создавать, настраивать и использовать роли программно и с помощью плагинов.
Создание пользовательских ролей программно
Для создания роли используется функция add_role(). Она принимает три параметра: имя роли, отображаемое название и массив прав (capabilities). Ниже пример создания роли "Менеджер контента" с ограниченными правами.
function wpcorp_add_custom_role() {
add_role(
'wpcorp_content_manager',
'Менеджер контента',
array(
'read' => true,
'edit_posts' => true,
'edit_others_posts' => true,
'publish_posts' => true,
'delete_posts' => false
)
);
}
register_activation_hook(__FILE__, 'wpcorp_add_custom_role');В этом примере роль может читать сайт, редактировать свои и чужие записи, публиковать записи, но не может удалять записи. Такой уровень доступа удобен для менеджера, который отвечает за наполнение контентом, но не имеет права удалять материалы.
Добавление и удаление ролей
Роли обычно добавляют при активации плагина или темы, чтобы не создавать их лишний раз. Для удаления роли используется функция remove_role(). Например:
function wpcorp_remove_custom_role() {
remove_role('wpcorp_content_manager');
}
register_deactivation_hook(__FILE__, 'wpcorp_remove_custom_role');Так мы обеспечиваем чистоту при деактивации плагина.
Управление правами доступа (capabilities) в пользовательских ролях
Каждая роль включает набор прав, которые определяют, что пользователь может делать в админке и на сайте. Можно добавлять или удалять права у существующих ролей с помощью функций add_cap() и remove_cap().
Пример добавления права на редактирование плагинов для роли:
function wpcorp_modify_role_caps() {
$role = get_role('wpcorp_content_manager');
if ($role) {
$role->add_cap('edit_plugins');
}
}
add_action('init', 'wpcorp_modify_role_caps');Будьте осторожны с правами, касающимися безопасности (например, управление пользователями, плагинами), чтобы не дать слишком широких полномочий.
Как проверить права пользователя в коде
Для проверки прав используйте функцию current_user_can(). Например, чтобы показать контент только пользователям с правом редактирования постов:
if (current_user_can('edit_posts')) {
echo 'Вы можете редактировать записи.';
} else {
echo 'Доступ запрещен.';
}Это помогает реализовать условный вывод и защищать части сайта.
Использование плагинов для управления ролями
Если не хочется писать код — можно использовать плагины. Вот лучшие из них для управления ролями и правами:
- User Role Editor — мощный и популярный плагин для создания и настройки ролей, добавления и удаления прав;
- Members от MemberPress — удобный интерфейс для управления ролями и создания приватного контента;
- Advanced Access Manager — комплексный инструмент для контроля доступа на уровне ролей, пользователей и контента.
Плагины позволяют быстро и безопасно настроить роли без погружения в код.
Пример создания роли через User Role Editor
После установки и активации плагина:
- Перейдите в меню Пользователи > User Role Editor.
- Нажмите «Добавить роль».
- Задайте имя и настраивайте права через чекбоксы.
- Сохраните роль и назначьте ее пользователям.
Это позволяет гибко управлять ролями прямо из админки.
Пример: ограничение доступа к кастомному типу записей для пользовательской роли
Допустим, у вас есть кастомный тип записей project, и вы хотите, чтобы роль "Менеджер контента" могла только просматривать эти записи, но не редактировать.
function wpcorp_register_project_cpt() {
$args = array(
'public' => true,
'label' => 'Проекты',
'capability_type' => 'project',
'map_meta_cap' => true,
'capabilities' => array(
'edit_post' => 'edit_project',
'read_post' => 'read_project',
'delete_post' => 'delete_project',
'edit_posts' => 'edit_projects',
'edit_others_posts' => 'edit_others_projects',
'publish_posts' => 'publish_projects',
'read_private_posts' => 'read_private_projects',
),
);
register_post_type('project', $args);
}
add_action('init', 'wpcorp_register_project_cpt');
function wpcorp_add_caps_to_content_manager() {
$role = get_role('wpcorp_content_manager');
if ($role) {
$role->add_cap('read_project');
$role->add_cap('read_private_projects');
// Не даем права на редактирование или публикацию
}
}
add_action('admin_init', 'wpcorp_add_caps_to_content_manager');Таким образом, Менеджер сможет видеть проекты, но не сможет их менять.
Резюмируем: основные советы по работе с пользовательскими ролями
- Создавайте роли через
add_role()с конкретным набором прав. - Удаляйте роли аккуратно с помощью
remove_role(), чтобы не оставлять мусор. - Используйте
add_cap()иremove_cap()для тонкой настройки прав внутри ролей. - Проверяйте права пользователей в шаблонах через
current_user_can(). - Для удобства и безопасности применяйте проверенные плагины, такие как User Role Editor.
- При работе с кастомными типами записей обязательно настраивайте отдельные права для каждого типа.
Такой подход позволит создать максимально гибкую и безопасную систему управления пользователями на сайте WordPress, соответствующую именно вашим бизнес-задачам.