Как автоматически удалять пустые регистрации пользователей в WordPress

Диагностика проблемы: что такое пустая регистрация и как ее обнаружить

Пустая регистрация — это учетная запись пользователя, которая была создана, но не содержит никакой полезной информации, например, отсутствует email, имя пользователя или профиль неактивен. Такие записи часто появляются из-за спам-ботов или ошибок при регистрации, занимают место в базе данных и могут влиять на производительность сайта.

Чтобы выявить пустые регистрации, выполните SQL-запрос к базе данных WordPress, например:

SELECT ID, user_login, user_email, user_registered FROM wp_users WHERE user_email = '' OR user_login = '' OR user_registered < '2023-01-01';

Этот запрос покажет пользователей без email, без логина или зарегистрированных до определенной даты (например, чтобы найти давно неактивных).

Пошаговое решение: автоматическое удаление пустых пользователей с помощью WP-Cron

1. Создайте функцию удаления пустых пользователей

function delete_empty_users() {
    global $wpdb;
    // Получаем ID пользователей без email или с пустым логином
    $user_ids = $wpdb->get_col(
        "SELECT ID FROM {$wpdb->users} WHERE user_email = '' OR user_login = ''"
    );
    if (empty($user_ids)) {
        return;
    }
    foreach ($user_ids as $user_id) {
        require_once ABSPATH . 'wp-admin/includes/user.php';
        wp_delete_user($user_id);
    }
}

2. Зарегистрируйте событие в WP-Cron

function schedule_empty_user_cleanup() {
    if (! wp_next_scheduled('empty_user_cleanup_hook')) {
        wp_schedule_event(time(), 'daily', 'empty_user_cleanup_hook');
    }
}
add_action('wp', 'schedule_empty_user_cleanup');
add_action('empty_user_cleanup_hook', 'delete_empty_users');

3. Размещение кода

Добавьте этот код в файл functions.php вашей дочерней темы или в отдельный плагин, чтобы не потерять изменения при обновлении.

Проверка результата после внедрения

  • Выполните запрос из раздела диагностики до и после запуска WP-Cron (обычно происходит при заходе на сайт или через системное задание).
  • Проверьте лог событий WP-Cron с помощью плагина WP Crontrol, убедитесь, что событие empty_user_cleanup_hook запускается.
  • Убедитесь, что пустые пользователи удалились из базы данных и не отображаются в админке WordPress (раздел "Пользователи").

Частые ошибки и как исправить

  • WP-Cron не запускается автоматически: На некоторых серверах WP-Cron может не работать из-за низкой посещаемости сайта. Решение: настроить системный cron на хостинге для вызова wp-cron.php напрямую.
  • Удаляются нужные пользователи: Проверьте условия выборки пользователей для удаления. Необходимо точно определить критерии пустой регистрации, например, не удалять пользователей с email, даже если логин кажется пустым.
  • Права доступа: Для вызова wp_delete_user() скрипт должен иметь соответствующие права (обычно это не проблема, если код выполняется от имени WordPress).
  • Кэширование: Если используется кэширование, обновите кэш после удаления пользователей для корректного отображения изменений.

Практические советы по безопасности и производительности

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

Сравнение способов удаления пустых пользователей

МетодПлюсыМинусы
Ручное удаление через SQLБыстро, без кодаРиск ошибок, требует навыков SQL, не автоматично
WP-Cron + PHP (код из статьи)Автоматизация, безопасное удаление с использованием API WordPressЗависит от корректной работы WP-Cron, требует базовых знаний PHP
Плагины очистки пользователейУдобство интерфейса, дополнительные функции (фильтры, отчеты)Нагрузка, возможность конфликтов, лишний код
Как правильно сделать удалённый раздел админки WordPress для клиентов
04.03.2026
Как избежать конфликтов между плагинами в WordPress
11.12.2025
Как создать собственный виджет в WordPress: подробное руководство
30.11.2025
Как удалить пустые категории в WordPress с помощью кода
21.03.2026
Как использовать WP-Cron для автоматизации задач в WordPress
07.05.2026