Как создать иерархию пользовательских ролей в WordPress для управления доступом

|

В 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

Если хочется обойтись без кода или получить более удобный интерфейс, можно использовать проверенные плагины:

Для интеграции с плагинами 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 требует внимательности и продуманности. Рекомендуется:

Используя описанные подходы и примеры кода, вы сможете создать гибкую иерархию пользовательских ролей, которая будет соответствовать требованиям вашего проекта и обеспечит надежное управление доступом.

Как создать иерархию комментариев в WordPress с пользовательской логикой
18.01.2026
WooCommerce: как правильно настроить иерархию категорий и проблемы с производительностью
17.04.2026
Как создать иерархию кастомных типов постов с поддержкой REST API в WordPress
11.03.2026
Как отключить виджеты в WordPress по ролям пользователей: практическое руководство
15.02.2026
Как реализовать иерархию с нюансами в WordPress с помощью мета-полей
15.01.2026
×
День SEO
Время сделать подарок своему WordPress!
-20% на премиум

шаблоны и плагины

Порадуй свой сайт ⋙