В WordPress роль пользователя определяет, какие действия он может выполнять на сайте. Иногда стандартных ролей (Подписчик, Автор, Редактор, Администратор) недостаточно, и возникает необходимость создать собственные роли с индивидуальными правами и дополнительными настройками. В этой статье подробно разберём, как программно создавать пользовательские роли, добавлять для них мета-настройки, а также управлять ими через админку.
Что такое пользовательские роли в WordPress и зачем они нужны
Роль — это набор прав (capabilities), которые определяют, что пользователь может делать: публиковать записи, редактировать страницы, управлять плагинами и так далее. Стандартные роли покрывают большинство задач, но в проектах с нестандартной логикой часто нужна более тонкая настройка. Например, создать роль «Контент-менеджер», который может только редактировать записи, но не менять настройки сайта, либо роль «Модератор комментариев».
Создание кастомных ролей позволяет разграничить доступ и повысить безопасность, а также облегчает управление пользователями.
Как программно добавить новую роль в WordPress
Для создания роли используется функция add_role(). Она принимает три параметра: slug роли, её имя и массив capabilities. Рассмотрим пример создания роли «Контент-менеджер» с базовыми правами для работы с записями:
function wpdir_add_custom_role() {
add_role('content_manager', 'Контент-менеджер', array(
'read' => true,
'edit_posts' => true,
'edit_others_posts' => true,
'publish_posts' => true,
'delete_posts' => false
));
}
add_action('init', 'wpdir_add_custom_role');
Важно: функцию лучше запускать один раз, например, при активации плагина, чтобы роль не создавалась повторно.
Удаление роли
Если нужно удалить роль, используется remove_role('content_manager');, например, при деактивации плагина.
Добавление пользовательских настроек для ролей
По умолчанию WordPress не предлагает отдельного интерфейса для настройки ролей, но мы можем создать мета-настройки для пользователей с определённой ролью. Например, добавим поле «Регион контент-менеджера» в профиль пользователя, чтобы хранить дополнительную информацию.
Добавление поля в профиль пользователя
function wpdir_show_custom_user_profile_fields($user) {
if (in_array('content_manager', $user->roles)) {
?>
<h3>Дополнительные настройки Контент-менеджера</h3>
<table class="form-table">
<tr>
<th><label for="wpdir_region">Регион</label></th>
<td>
<input type="text" name="wpdir_region" id="wpdir_region" value="<?php echo esc_attr(get_user_meta($user->ID, 'wpdir_region', true)); ?>" class="regular-text" /><br />
<span class="description">Введите регион работы контент-менеджера</span>
</td>
</tr>
</table>
<?php
}
}
add_action('show_user_profile', 'wpdir_show_custom_user_profile_fields');
add_action('edit_user_profile', 'wpdir_show_custom_user_profile_fields');
Сохранение значения поля
function wpdir_save_custom_user_profile_fields($user_id) {
if (!current_user_can('edit_user', $user_id)) {
return false;
}
if (isset($_POST['wpdir_region'])) {
update_user_meta($user_id, 'wpdir_region', sanitize_text_field($_POST['wpdir_region']));
}
}
add_action('personal_options_update', 'wpdir_save_custom_user_profile_fields');
add_action('edit_user_profile_update', 'wpdir_save_custom_user_profile_fields');
Использование пользовательских ролей в коде и проверка прав
Для проверки, имеет ли пользователь нужную роль или capability, можно использовать функции current_user_can() или проверять роли напрямую. Например, чтобы ограничить доступ к определённой странице только для «Контент-менеджера»:
function wpdir_restrict_page_access() {
if (!current_user_can('content_manager') && !current_user_can('administrator')) {
wp_die('У вас нет прав для просмотра этой страницы.');
}
}
add_action('template_redirect', 'wpdir_restrict_page_access');
Это простой способ контролировать доступ без установки сторонних плагинов.
Рекомендации по плагинам для управления ролями и возможностями
Хотя программный способ более гибкий и оптимальный для разработчиков, иногда удобнее использовать готовые плагины. Вот несколько проверенных решений:
- Members — мощный инструмент для создания и редактирования ролей и capabilities.
- User Role Editor — удобный интерфейс для управления ролями и возможностями.
- Clearfy Pro — среди прочих функций содержит инструменты для оптимизации и управления правами пользователей.
Как интегрировать пользовательские роли с кастомными плагинами
Если вы разрабатываете собственный плагин и хотите, чтобы он учитывал кастомные роли, стоит использовать фильтры и хуки для расширения функционала. Например, добавлять проверки capabilities там, где это нужно:
function wpdir_plugin_check_access() {
if (!current_user_can('content_manager')) {
wp_die('Доступ запрещён');
}
// Ваша логика
}
Также можно регистрировать собственные capabilities для управления доступом к функциям плагина.
Подсказки и важные моменты при работе с ролями
- Всегда создавайте и удаляйте роли при активации/деактивации плагина, чтобы не засорять базу.
- Используйте префикс домена в названиях функций, чтобы избежать конфликтов (например,
wpdir_add_custom_role). - При добавлении новых capabilities тщательно тестируйте, чтобы не дать пользователям больше прав, чем нужно.
- Сохраняйте данные пользователя с помощью
update_user_metaи обязательно фильтруйте ввод. - Продумывайте UX в админке, чтобы дополнительные настройки не запутывали пользователей.
Создание и управление пользовательскими ролями — мощный инструмент расширения функционала WordPress. Такой подход особенно полезен для сайтов с большим количеством пользователей и разным уровнем доступа.