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

В 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. Такой подход особенно полезен для сайтов с большим количеством пользователей и разным уровнем доступа.

Как избежать проблем с кэширующими плагинами в WordPress
22.02.2026
Как добавить свой shortcode в WordPress
03.11.2025
Как отключить XML-RPC в WordPress для повышения безопасности
23.03.2026
Как избежать проблем с переадресацией в WooCommerce после изменения URL товара
17.04.2026
Как создать пользовательские роли и настройки для них в WordPress
26.01.2026