Как добавить пользовательские роли и права в WordPress без плагинов

Управление ролями и правами пользователей в WordPress — важная задача для любого разработчика, особенно когда стандартных ролей (администратор, редактор, автор, подписчик) недостаточно для конкретного проекта. В этой статье мы подробно разберём, как добавить пользовательские роли и настроить для них права доступа без использования плагинов, используя только код. Это поможет избежать лишних зависимостей и оптимизировать производительность сайта.

Что такое пользовательские роли и права в WordPress

Роль — это набор прав (capabilities), определяющих, что пользователь может делать на сайте. WordPress по умолчанию содержит несколько ролей с предустановленными правами. Однако часто возникает необходимость создать уникальную роль с собственным набором прав, например, «Менеджер контента» или «Модератор комментариев».

Права (capabilities) — это отдельные разрешения, например, «edit_posts» (редактировать записи), «publish_posts» (публиковать записи), «moderate_comments» (модерировать комментарии). Комбинируя их, можно гибко настраивать поведение ролей.

Создание пользовательской роли с помощью кода

Для добавления новой роли в WordPress используется функция add_role(). Она принимает три параметра: уникальный идентификатор роли, отображаемое имя и массив прав.

function wpfront_add_custom_role() {
    add_role(
        'content_manager', // уникальный идентификатор роли
        'Менеджер контента', // отображаемое имя
        array(
            'read' => true, // разрешить вход в админку
            'edit_posts' => true, // редактировать свои записи
            'edit_others_posts' => true, // редактировать чужие записи
            'publish_posts' => true, // публиковать записи
            'delete_posts' => false, // запретить удалять записи
            'moderate_comments' => true // модерация комментариев
        )
    );
}
add_action('init', 'wpfront_add_custom_role');

Этот код создаст новую роль «Менеджер контента» с указанными правами. Обратите внимание, что функцию нужно запускать только один раз, иначе роль будет создаваться заново при каждом вызове. Для этого можно добавить проверку или запускать код при активации темы/плагина.

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

Иногда нужно изменить права у уже существующей роли. Для этого используйте объект WP_Roles и методы add_cap() и remove_cap(). Например, добавим право «upload_files» к роли «Автор»:

function wpfront_modify_author_caps() {
    $role = get_role('author');
    if ($role) {
        $role->add_cap('upload_files');
    }
}
add_action('init', 'wpfront_modify_author_caps');

Этот код позволит авторам загружать файлы в медиатеку, чего по умолчанию у них нет.

Удаление прав у роли

Чтобы убрать права, используется метод remove_cap(). Например, запретим редактору удалять записи:

function wpfront_remove_editor_delete() {
    $role = get_role('editor');
    if ($role) {
        $role->remove_cap('delete_posts');
    }
}
add_action('init', 'wpfront_remove_editor_delete');

Как проверить права пользователя в шаблонах и функциях

Для условного отображения элементов и контроля доступа в коде темы или плагина можно использовать функцию current_user_can(). Она проверяет, обладает ли текущий пользователь указанным правом.

Пример: показываем кнопку только пользователям с правом «publish_posts»:

if (current_user_can('publish_posts')) {
    echo '<button>Опубликовать статью</button>';
} else {
    echo '<p>У вас нет прав на публикацию.</p>';
}

Автоматическое удаление пользовательских ролей и прав

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

function wpfront_remove_custom_role() {
    remove_role('content_manager');
}
register_deactivation_hook(__FILE__, 'wpfront_remove_custom_role');

Этот код удалит роль «content_manager» при деактивации плагина или темы.

Пример комплексного решения: создание роли и добавление пользовательского права

Допустим, нам нужно создать роль «Quiz Master» для сайта с плагином Quizle (https://wpshop.ru/quizle/?utm_source=wpfront.ru&utm_medium=article&utm_campaign=kak-dobavit-polzovatelskie-rolipravila-v-wordpress-bez-plaginov). Роль должна иметь право создавать и редактировать викторины, а также модерировать комментарии.

function wpfront_add_quiz_master_role() {
    add_role('quiz_master', 'Quiz Master', array(
        'read' => true,
        'edit_quizzes' => true, // кастомное право для викторин
        'publish_quizzes' => true,
        'moderate_comments' => true
    ));
}
add_action('init', 'wpfront_add_quiz_master_role');

Чтобы права edit_quizzes и publish_quizzes работали, плагин Quizle должен их поддерживать. Если вы создаёте собственный тип записи викторин, добавьте эти права при регистрации типа записи.

Регистрация пользовательских прав при создании кастомных типов записей

Для новых типов записей (Custom Post Types) можно задать права, чтобы роли с нужными способностями могли управлять ими. Пример регистрации типа записи «Викторина» с кастомными правами:

function wpfront_register_quiz_cpt() {
    $labels = array(
        'name' => 'Викторины',
        'singular_name' => 'Викторина',
    );

    $capabilities = array(
        'edit_post' => 'edit_quiz',
        'read_post' => 'read_quiz',
        'delete_post' => 'delete_quiz',
        'edit_posts' => 'edit_quizzes',
        'edit_others_posts' => 'edit_others_quizzes',
        'publish_posts' => 'publish_quizzes',
        'read_private_posts' => 'read_private_quizzes',
    );

    $args = array(
        'labels' => $labels,
        'public' => true,
        'has_archive' => true,
        'capability_type' => array('quiz', 'quizzes'),
        'map_meta_cap' => true,
        'capabilities' => $capabilities,
        'supports' => array('title', 'editor', 'comments'),
    );

    register_post_type('quiz', $args);
}
add_action('init', 'wpfront_register_quiz_cpt');

Так вы сможете гибко распределять права между ролями, назначая им нужные capability.

Заключение по работе с ролями и правами

Добавление и управление пользовательскими ролями и правами без плагинов — это эффективный способ сделать ваш WordPress-сайт более гибким и безопасным. Используйте add_role(), get_role(), add_cap(), remove_cap() и remove_role() для тонкой настройки доступа.

Не забывайте использовать current_user_can() для проверки прав в шаблонах и плагинах, чтобы обеспечить корректное поведение интерфейса и защиту данных.

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

Как создать собственный шорткод в WordPress с примером кода
07.11.2025
WooCommerce: автоматическое изменение цены товара при изменении количества
01.07.2026
Автоматическое удаление неактивных пользователей WordPress
27.03.2026
Как автоматически отключить Emoji в WordPress для ускорения сайта
21.02.2026
Как создать автоматический импорт контента из внешнего источника в WordPress
26.02.2026