В WordPress стандартные роли пользователей (администратор, редактор, автор, подписчик и т. д.) часто не дают нужной гибкости в управлении доступом. Особенно, когда требуется сложная иерархия ролей с наследованием прав. В этой статье разберем, как создать иерархию пользовательских ролей, расширить или изменить их возможности, а также управлять доступом к разным разделам и функциям сайта.
Почему важна иерархия пользовательских ролей в WordPress
Стандартные роли WordPress имеют фиксированный набор прав. Но в реальных проектах часто нужно:
- Создать несколько уровней модераторов с разным набором возможностей.
- Ограничить доступ к определенным разделам админки.
- Добавить кастомные роли для специфичных задач, например, менеджер по продуктам, редактор новостей, проверяющий и др.
Иерархия ролей позволяет организовать права таким образом, чтобы старшие роли включали права младших, а также имели расширенные возможности. Это упрощает управление пользователями и снижает риск ошибок в настройках доступа.
Создаем пользовательские роли с иерархией: пошаговое руководство
Для начала создадим две новые роли: wphierarchy_manager и wphierarchy_editor_assistant, где менеджер будет иметь больше прав, чем помощник редактора.
Добавление ролей и назначение прав
function wphierarchy_add_custom_roles() {
// Роль помощника редактора с ограниченными правами
add_role('wphierarchy_editor_assistant', 'Помощник редактора', array(
'read' => true,
'edit_posts' => true,
'edit_published_posts' => true,
'upload_files' => true
));
// Роль менеджера с расширенными правами
add_role('wphierarchy_manager', 'Менеджер', array(
'read' => true,
'edit_posts' => true,
'edit_others_posts' => true,
'edit_published_posts' => true,
'publish_posts' => true,
'delete_posts' => true,
'upload_files' => true
));
}
add_action('init', 'wphierarchy_add_custom_roles');В этом примере мы создали две роли, где менеджер имеет дополнительные права на редактирование чужих публикаций и публикацию новых постов.
Наследование ролей — добавляем права младшей роли к старшей
В WordPress нет встроенного механизма наследования ролей, но мы можем вручную добавить права младшей роли старшей с помощью функции:
function wphierarchy_inherit_caps() {
$manager = get_role('wphierarchy_manager');
$assistant = get_role('wphierarchy_editor_assistant');
if ($manager && $assistant) {
foreach ($assistant->capabilities as $cap => $grant) {
if ($grant) {
$manager->add_cap($cap);
}
}
}
}
add_action('init', 'wphierarchy_inherit_caps');Этот код гарантирует, что все права помощника редактора будут добавлены менеджеру, если вдруг что-то не было указано изначально.
Управление доступом к страницам и функциям админки на основе иерархии ролей
После создания ролей нужно ограничить доступ к определенным разделам админки. Для этого используем хуки и проверяем роль пользователя.
Пример: скрываем меню для помощника редактора
function wphierarchy_restrict_admin_menu() {
if (current_user_can('wphierarchy_editor_assistant') && !current_user_can('wphierarchy_manager')) {
remove_menu_page('edit-comments.php'); // Скрываем комментарии
remove_menu_page('tools.php'); // Скрываем инструменты
}
}
add_action('admin_menu', 'wphierarchy_restrict_admin_menu', 999);Так мы можем тонко настраивать, какие пункты меню доступны каждой роли.
Ограничение доступа к кастомным функциям и страницам
Если вы создаете собственные страницы в админке через add_menu_page, не забудьте проверить права доступа:
add_menu_page(
'Кастомная страница',
'Кастомная страница',
'wphierarchy_manager', // Доступ только менеджеру
'custom_page_slug',
'wphierarchy_render_custom_page'
);
function wphierarchy_render_custom_page() {
if (!current_user_can('wphierarchy_manager')) {
wp_die('Доступ запрещен');
}
echo '<h1>Добро пожаловать, Менеджер!</h1>';
}Плагины для расширенного управления ролями и доступом в WordPress
Если хочется обойтись без кода или получить более удобный интерфейс, можно использовать проверенные плагины:
- User Role Editor — позволяет создавать, редактировать роли и права через админку.
- Members от MemberPress — мощный плагин для управления ролями, разрешениями и контентом.
- Advanced Access Manager — гибкий инструмент для настройки доступа к страницам, постам и функциям.
Для интеграции с плагинами WPShop можно рассмотреть Clearfy Pro — он улучшает безопасность и оптимизацию сайта, включая тонкие настройки доступа.
Реальный пример: добавляем роль «Модератор комментариев» с ограниченным доступом
Создадим роль, которая сможет только читать сайт и управлять комментариями, но не иметь права редактировать посты:
function wphierarchy_add_comment_moderator_role() {
add_role('wphierarchy_comment_moderator', 'Модератор комментариев', array(
'read' => true,
'edit_posts' => false,
'moderate_comments' => true
));
}
add_action('init', 'wphierarchy_add_comment_moderator_role');Чтобы скрыть все пункты меню, кроме комментариев, для этой роли, используем:
function wphierarchy_restrict_menu_for_comment_moderator() {
if (current_user_can('wphierarchy_comment_moderator')) {
global $menu;
foreach ($menu as $key => $item) {
if ($item[2] != 'edit-comments.php') {
unset($menu[$key]);
}
}
}
}
add_action('admin_menu', 'wphierarchy_restrict_menu_for_comment_moderator', 999);Выводы и рекомендации по построению иерархии ролей
Создание иерархии пользовательских ролей в WordPress требует внимательности и продуманности. Рекомендуется:
- Сначала продумать, какие права и задачи нужно разграничить.
- Создавать минимально необходимые права для каждой роли.
- Использовать механизм наследования прав, чтобы избежать дублирования.
- Тестировать роли на тестовом сайте, чтобы не заблокировать себя.
- При необходимости применять проверенные плагины для управления ролями.
Используя описанные подходы и примеры кода, вы сможете создать гибкую иерархию пользовательских ролей, которая будет соответствовать требованиям вашего проекта и обеспечит надежное управление доступом.