Как добавить пользовательские роли в WordPress с поддержкой AJAX

В WordPress роли пользователей определяют, какие действия пользователь может выполнять на сайте. Иногда стандартных ролей недостаточно, и нужно создавать свои собственные роли с уникальными правами. В этой статье подробно разберём, как добавить пользовательские роли программно и реализовать интерфейс для управления ролями через AJAX, чтобы без перезагрузки страницы менять права и роли пользователей.

Что такое пользовательские роли и зачем они нужны в WordPress

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

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

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

Добавление пользовательской роли через код в functions.php

Пример создания роли «wpkey_manager» с ограниченным набором прав:

function wpkey_add_custom_role() {
    add_role('wpkey_manager', 'Менеджер WPKey', array(
        'read' => true,
        'edit_posts' => true,
        'delete_posts' => false,
        'upload_files' => true
    ));
}
add_action('init', 'wpkey_add_custom_role');

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

Как изменить права роли программно

Иногда нужно добавить права к существующей роли или убрать их. Пример добавления права:

function wpkey_modify_role_caps() {
    $role = get_role('wpkey_manager');
    if ($role) {
        $role->add_cap('edit_others_posts');
    }
}
add_action('init', 'wpkey_modify_role_caps');

Удаление права работает аналогично с помощью remove_cap().

Создание интерфейса для управления ролями через AJAX

Чтобы менять роли и права пользователей без перезагрузки страницы, можно использовать AJAX-запросы. Рассмотрим пример, где в админке выводится список пользователей с кнопками для изменения роли, а запросы обрабатываются асинхронно.

Регистрация AJAX обработчика

Добавим обработчик, который будет менять роль пользователя:

add_action('wp_ajax_wpkey_change_user_role', 'wpkey_change_user_role_callback');

function wpkey_change_user_role_callback() {
    if (!current_user_can('promote_users')) {
        wp_send_json_error('Недостаточно прав');
    }

    $user_id = intval($_POST['user_id']);
    $new_role = sanitize_text_field($_POST['role']);

    $user = get_user_by('id', $user_id);
    if (!$user) {
        wp_send_json_error('Пользователь не найден');
    }

    $user->set_role($new_role);
    wp_send_json_success('Роль успешно изменена');
}

JavaScript для отправки AJAX-запроса

Добавим скрипт, который отправляет запрос при нажатии кнопки:

jQuery(document).ready(function($) {
    $('.wpkey-change-role-btn').on('click', function() {
        var userId = $(this).data('user-id');
        var newRole = $(this).data('role');
        $.post(ajaxurl, {
            action: 'wpkey_change_user_role',
            user_id: userId,
            role: newRole
        }, function(response) {
            if(response.success) {
                alert(response.data);
            } else {
                alert('Ошибка: ' + response.data);
            }
        });
    });
});

Вывод списка пользователей с кнопками в админке

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

function wpkey_render_users_table() {
    if (!current_user_can('list_users')) {
        echo 'Нет доступа';
        return;
    }
    $users = get_users();
    echo '<table><thead><tr><th>Пользователь</th><th>Роль</th><th>Действия</th></tr></thead><tbody>';
    foreach ($users as $user) {
        echo '<tr>';
        echo '<td>' . esc_html($user->user_login) . '</td>';
        echo '<td>' . esc_html(implode(', ', $user->roles)) . '</td>';
        echo '<td>';
        echo '<button class="wpkey-change-role-btn" data-user-id="' . $user->ID . '" data-role="wpkey_manager">Сделать менеджером</button> ';
        echo '<button class="wpkey-change-role-btn" data-user-id="' . $user->ID . '" data-role="subscriber">Сделать подписчиком</button>';
        echo '</td>';
        echo '</tr>';
    }
    echo '</tbody></table>';
}
add_action('admin_menu', function() {
    add_menu_page('Управление ролями WPKey', 'Роли WPKey', 'manage_options', 'wpkey-roles', 'wpkey_render_users_table');
});

Полезные плагины для работы с ролями и правами

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

  • User Role Editor — мощный инструмент для управления ролями и правами через интерфейс.
  • Members — создаёт и управляет ролями, предоставляет API для разработчиков.
  • WPFront User Role Editor — простой редактор ролей с удобным интерфейсом.

Однако собственный код удобен, когда нужна интеграция с другими функциями сайта и кастомизация под конкретные задачи.

Советы по безопасности при работе с ролями через AJAX

При реализации AJAX-обработчиков, меняющих роли, важно учитывать безопасность:

  • Проверять права пользователя на выполнение действия (current_user_can('promote_users') или аналогичные).
  • Использовать nonce для защиты от CSRF-атак.
  • Санитизировать все входящие данные (intval(), sanitize_text_field()).
  • Логировать изменения для аудита при необходимости.

Это поможет избежать несанкционированного доступа и ошибок.

Итоги

Добавление пользовательских ролей и управление ими через AJAX — мощный инструмент для кастомизации WordPress под конкретные задачи. Такой подход позволяет улучшить UX админки, ускорить работу и повысить безопасность. Пример из статьи можно доработать и расширить под любые нужды.

Для более удобного управления ролями также можно обратить внимание на плагин User Role Editor с поддержкой расширенных возможностей.

Как добавить AJAX в WordPress без плагинов
25.11.2025
Как автоматически отключать неиспользуемые плагины в WordPress
29.03.2026
Как изменить размер изображений в WordPress без потери качества
05.04.2026
Как защитить WordPress от Brute Force атак: приватные методы и примеры кода
12.01.2026
WooCommerce: автоматическое удаление неоплаченных заказов по таймауту
27.05.2026

Ресурс в разработке, скоро здесь будет сайт по вордпресс