В стандартной установке WordPress предусмотрено несколько ролей пользователей: Администратор, Редактор, Автор, Участник и Подписчик. Однако в реальных проектах часто возникает необходимость создавать собственные, кастомные роли с уникальным набором прав доступа. В этой статье подробно разберём, как добавить дополнительные типы пользователей в WordPress, управлять их возможностями и при необходимости удалить или изменить существующие роли.
Зачем нужны кастомные роли пользователей в WordPress
Стандартных ролей WordPress хватает для большинства сайтов, но если вы создаёте сайт с нестандартной логикой, например, образовательный портал, маркетплейс или мультивендорный магазин, вам понадобятся дополнительные роли с особыми правами.
Создание кастомных ролей позволяет:
- Упростить управление доступом для конкретных групп пользователей;
- Избежать излишнего расширения прав у стандартных ролей;
- Обеспечить более точную безопасность сайта;
- Сделать интерфейс администрирования более удобным, скрывая ненужные разделы.
Создание кастомной роли: базовый пример
Для создания собственной роли в WordPress используется функция add_role(). Она принимает три параметра: имя роли (slug), отображаемое имя и массив прав (capabilities).
Пример создания роли «Менеджер контента» с ограниченными правами:
function two_wp_add_custom_role() {
add_role(
'content_manager', // slug роли
'Менеджер контента', // отображаемое имя
array(
'read' => true, // разрешение читать сайт
'edit_posts' => true, // редактировать записи
'edit_published_posts' => true, // редактировать опубликованные
'publish_posts' => true, // публиковать записи
'upload_files' => true, // загружать файлы
'delete_posts' => false // нельзя удалять записи
)
);
}
add_action('init', 'two_wp_add_custom_role');Данный код создаст новую роль с ограниченным набором возможностей, подходящую для сотрудников, которые занимаются публикацией контента, но не должны удалять записи.
Изменение и удаление ролей и прав
Если нужно добавить или убрать права у существующей роли, используйте класс WP_Roles или функции add_cap() и remove_cap() объекта роли.
Пример добавления права для роли «Автор»:
function two_wp_modify_author_caps() {
$role = get_role('author');
if ($role) {
$role->add_cap('upload_files'); // разрешаем авторам загружать файлы
}
}
add_action('init', 'two_wp_modify_author_caps');Удаление роли выполняется функцией remove_role():
function two_wp_remove_custom_role() {
remove_role('content_manager');
}
// Запускайте удаление один раз, потом закомментируйте или удалите вызов
// add_action('init', 'two_wp_remove_custom_role');Плагины для удобного управления ролями и правами
Если не хочется писать код, существуют отличные плагины для управления ролями и возможностями пользователей:
- User Role Editor — позволяет легко создавать, изменять и удалять роли через интерфейс.
- Members — расширенный менеджер прав с возможностью создавать приватный контент.
Использование плагинов особенно удобно для тех, кто не хочет рисковать, меняя роли вручную через код.
Как отобразить кастомные роли в админке и ограничить доступ к разделам
Создание роли — только половина дела. Часто нужно ограничить доступ к определённым меню или страницам админки для новых ролей. Это достигается с помощью фильтров и хуков WordPress.
Пример скрытия меню «Плагины» для роли «content_manager»:
function two_wp_remove_menus_for_content_manager() {
if (current_user_can('content_manager')) {
remove_menu_page('plugins.php'); // меню Плагины
}
}
add_action('admin_menu', 'two_wp_remove_menus_for_content_manager', 999);Также можно ограничить доступ к страницам через проверку прав в хуках admin_init или current_screen.
Создание кастомного шаблона профиля для новых ролей
Если у вас есть особые поля или функционал для кастомных ролей, вы можете дополнить страницу редактирования профиля пользователя. Для этого используются хуки show_user_profile и edit_user_profile.
Пример добавления поля «Отдел» для роли «content_manager»:
function two_wp_extra_profile_fields($user) {
if (in_array('content_manager', $user->roles)) {
?>
<h3>Дополнительные данные</h3>
<table class="form-table">
<tr>
<th><label for="department">Отдел</label></th>
<td>
<input type="text" name="department" id="department" value="<?php echo esc_attr(get_user_meta($user->ID, 'department', true)); ?>" class="regular-text" /><br />
<span class="description">Введите название отдела, в котором работает пользователь.</span>
</td>
</tr>
</table>
<?php
}
}
add_action('show_user_profile', 'two_wp_extra_profile_fields');
add_action('edit_user_profile', 'two_wp_extra_profile_fields');
function two_wp_save_extra_profile_fields($user_id) {
if (!current_user_can('edit_user', $user_id)) {
return false;
}
if (isset($_POST['department'])) {
update_user_meta($user_id, 'department', sanitize_text_field($_POST['department']));
}
}
add_action('personal_options_update', 'two_wp_save_extra_profile_fields');
add_action('edit_user_profile_update', 'two_wp_save_extra_profile_fields');Резюме и рекомендации
Добавление дополнительных типов пользователей в WordPress — мощный инструмент для расширения функционала сайта. Правильное распределение прав и создание кастомных ролей помогает сделать сайт более безопасным и удобным для администрирования.
Рекомендуется:
- Тщательно планировать набор прав для новых ролей;
- Использовать плагины управления ролями для упрощения задач;
- Тестировать новые роли на тестовом сайте перед внедрением;
- Добавлять кастомные поля и ограничения интерфейса под нужды новых ролей.
Подробности и дополнительные инструменты можно найти на wpshop.ru.