WordPress удаление пользователя при удалённом запросе: практическое руководство

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

Почему удаление пользователя через удалённый запрос полезно

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

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

Создание REST API эндпоинта для удаления пользователя

WordPress с версии 4.7 включает REST API, который позволяет создавать свои собственные эндпоинты. Для удаления пользователя создадим кастомный маршрут с проверкой прав.

Регистрация маршрута и обработчика запроса

Добавим следующий код в файл functions.php вашей темы или в кастомный плагин:

add_action('rest_api_init', function () {
    register_rest_route('wpauth/v1', '/delete-user/(?P<id>\d+)', array(
        'methods' => 'DELETE',
        'callback' => 'wpauth_delete_user_callback',
        'permission_callback' => 'wpauth_delete_user_permissions_check',
    ));
});

function wpauth_delete_user_permissions_check(WP_REST_Request $request) {
    return current_user_can('delete_users');
}

function wpauth_delete_user_callback(WP_REST_Request $request) {
    $user_id = (int) $request['id'];

    if (!get_userdata($user_id)) {
        return new WP_Error('user_not_found', 'Пользователь не найден', array('status' => 404));
    }

    if (!wp_delete_user($user_id)) {
        return new WP_Error('delete_failed', 'Не удалось удалить пользователя', array('status' => 500));
    }

    return array('message' => 'Пользователь успешно удалён', 'user_id' => $user_id);
}

Этот код создаёт REST API маршрут /wp-json/wpauth/v1/delete-user/{id}, который принимает DELETE запрос с ID пользователя для удаления.

Пояснения к коду

  • wpauth_delete_user_permissions_check проверяет, что текущий пользователь имеет право удалять пользователей. Это важно для безопасности.
  • wpauth_delete_user_callback проверяет существование пользователя, пытается удалить и возвращает результат.
  • Используется встроенная функция wp_delete_user(), которая корректно удаляет пользователя и все связанные данные.

Безопасность при удалённом удалении пользователей

Очень важно, чтобы доступ к этому API имели только доверенные пользователи. Вот рекомендации по защите:

  • Используйте аутентификацию через cookie (если вызов идёт с фронтенда) или через OAuth / JWT токены при интеграции с внешними сервисами.
  • Проверяйте права пользователя через current_user_can('delete_users').
  • Ограничивайте доступ к API например по IP или другим параметрам, если это возможно.
  • Логируйте удаление пользователей для аудита.

Пример вызова REST API для удаления пользователя

Если вы используете JavaScript, то удаление пользователя с ID 25 через fetch выглядит так:

fetch('/wp-json/wpauth/v1/delete-user/25', {
    method: 'DELETE',
    credentials: 'same-origin', // чтобы передавались куки
    headers: {
        'X-WP-Nonce': wpauth_api_nonce // nonce для проверки безопасности
    }
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Ошибка:', error));

Для работы nonce нужно локализовать скрипт в PHP и передать nonce:

wp_localize_script('your-script-handle', 'wpauth_api_nonce', wp_create_nonce('wp_rest'));

Альтернатива: удаление пользователя через AJAX в админке

Если нужно сделать удаление пользователя через AJAX в административной панели, можно использовать стандартный AJAX API WordPress.

Пример реализации AJAX удаления пользователя

add_action('wp_ajax_wpauth_delete_user', 'wpauth_delete_user_ajax_callback');

function wpauth_delete_user_ajax_callback() {
    if (!current_user_can('delete_users')) {
        wp_send_json_error('Нет прав для удаления пользователей');
    }

    $user_id = isset($_POST['user_id']) ? intval($_POST['user_id']) : 0;
    if (!$user_id || !get_userdata($user_id)) {
        wp_send_json_error('Пользователь не найден');
    }

    if (wp_delete_user($user_id)) {
        wp_send_json_success('Пользователь успешно удалён');
    } else {
        wp_send_json_error('Ошибка при удалении пользователя');
    }
}

В JS отправляем AJAX запрос:

jQuery.post(ajaxurl, {
    action: 'wpauth_delete_user',
    user_id: 25,
    _ajax_nonce: wpauth_ajax_nonce
}, function(response) {
    if (response.success) {
        alert(response.data);
    } else {
        alert('Ошибка: ' + response.data);
    }
});

Не забудьте добавить nonce и локализовать скрипт в PHP:

wp_localize_script('your-script-handle', 'wpauth_ajax_nonce', wp_create_nonce('wpauth_delete_user_nonce'));

Обработка ошибок и уведомления

При удалении пользователя важно корректно обрабатывать ошибки. Например, если пользователь не найден, возвращать 404. Если нет прав — 403. Это помогает фронтенду правильно реагировать и показывать пользователю информативные сообщения.

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

Выводы и рекомендации

Удаление пользователей WordPress через удалённые запросы — мощный инструмент для автоматизации и интеграций. Главное — обеспечить безопасность и правильную обработку ошибок.

Используйте REST API с проверкой прав и nonce, логируйте действия и тестируйте на тестовом сайте перед применением в продакшене.

Если нужна более сложная логика удаления (например, перенос контента на другого пользователя), то используйте дополнительные параметры и расширяйте callback функции.

WordPress автоматическая блокировка подозрительных входов: настройка и примеры кода
17.12.2025
WordPress установка и настройка OAuth2 сервера: пошаговое руководство с примерами кода
30.12.2025
WordPress авторизация через LDAP: настройка и примеры кода
07.03.2026
WordPress авторизация через SMS и Email с использованием WPQRCode
19.02.2026
WordPress кастомные сообщения об ошибках при входе: настройка и примеры
01.12.2025