Зачем нужны пользовательские роли и права в WordPress
В WordPress по умолчанию есть набор стандартных ролей — Администратор, Редактор, Автор, Участник и Подписчик. Эти роли имеют фиксированные права, которые подходят для большинства сайтов. Но на практике часто требуется более гибкое управление доступом, например, ограничить возможности конкретного пользователя или создать новую роль с уникальным набором прав. Это особенно важно при работе с командами разработчиков, редакторов, маркетологов и других участников проекта.
Создание и настройка пользовательских ролей позволяет точно определить, кто и что может делать на сайте, повышая безопасность и удобство управления.
В этой статье разберём, как программно создавать пользовательские роли и назначать им права, а также как редактировать существующие роли с помощью кода и популярных плагинов.
Основы работы с ролями и правами в WordPress
В WordPress управление ролями и правами осуществляется через объекты WP_Roles и функции типа add_role(), remove_role(), add_cap() и remove_cap(). Каждая роль — это набор прав (capabilities), которые определяют, что пользователь с этой ролью может делать.
Например, право edit_posts позволяет редактировать записи, а manage_options — менять настройки сайта.
Чтобы создать новую роль, используется функция add_role():
function wpacademy_add_custom_role() {
add_role(
'content_manager', // slug роли
'Менеджер контента', // название роли
array(
'read' => true,
'edit_posts' => true,
'publish_posts' => true,
'upload_files' => true,
// дополнительные права
)
);
}
add_action('init', 'wpacademy_add_custom_role');Этот код создаст новую роль с базовыми правами для работы с записями и загрузкой файлов.
Удаление и изменение ролей
Если роль больше не нужна, её можно удалить функцией remove_role('content_manager'). Чтобы добавить или убрать права у существующей роли, используется add_cap() или remove_cap() в объекте роли:
$role = get_role('editor');
$role->add_cap('edit_theme_options');
$role->remove_cap('delete_pages');Так вы можете тонко настраивать возможности ролей, добавляя необходимые права без создания новых.
Пример: создаём роль «Контент-редактор» с ограниченными правами
Допустим, нам нужна роль, которая сможет редактировать и публиковать записи, но не иметь доступа к настройкам сайта и не удалять записи других пользователей.
Вот полный пример функции, которую нужно добавить в файл functions.php вашей темы или в кастомный плагин:
function wpacademy_create_content_editor_role() {
// Удаляем роль, если она существует, чтобы избежать дублирования
if (get_role('content_editor')) {
remove_role('content_editor');
}
add_role('content_editor', 'Контент-редактор', array(
'read' => true,
'edit_posts' => true,
'edit_published_posts' => true,
'publish_posts' => true,
'upload_files' => true,
'delete_posts' => false, // запрет на удаление
'delete_others_posts' => false,
'manage_categories' => false,
'edit_others_posts' => false
));
}
add_action('init', 'wpacademy_create_content_editor_role');После добавления и активации этого кода в админке появится новая роль «Контент-редактор», которую можно назначать пользователям.
Проверка прав пользователя в шаблонах и плагинах
Чтобы условно выводить контент или функционал, проверяйте права пользователя с помощью функции current_user_can():
if (current_user_can('publish_posts')) {
echo 'Вы можете публиковать записи';
} else {
echo 'У вас нет прав для публикации';
}Это полезно для ограничения доступа к определённым частям сайта или панели управления.
Управление ролями с помощью плагинов
Если вы предпочитаете GUI вместо кода, рекомендую использовать плагин Members. Он позволяет создавать и редактировать роли, назначать права и ограничивать доступ без программирования.
Ещё один популярный плагин — Clearfy Pro, который среди прочего улучшает безопасность и управление правами пользователя.
Как интегрировать с вашим кастомным плагином
Если вы разрабатываете собственный плагин, всегда регистрируйте роли и права при активации плагина, а при деактивации — удаляйте их, чтобы не оставлять «мусор» в системе.
register_activation_hook(__FILE__, 'wpacademy_plugin_activate');
function wpacademy_plugin_activate() {
wpacademy_create_content_editor_role();
}
register_deactivation_hook(__FILE__, 'wpacademy_plugin_deactivate');
function wpacademy_plugin_deactivate() {
remove_role('content_editor');
}Это хороший стиль и практика для поддержания чистоты в базе данных WordPress.
Безопасность и рекомендации при работе с ролями
Никогда не давайте неограниченный доступ пользователям, которые не должны иметь его. Обязательно тестируйте новые роли в режиме песочницы или на тестовом сайте.
При создании новых ролей учитывайте принципы наименьших привилегий — предоставляйте только те права, которые действительно нужны для работы.
Регулярно проверяйте и обновляйте права, особенно после установки новых плагинов или обновления WordPress, чтобы избежать уязвимостей.