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

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

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

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

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

Добавление отслеживания последнего входа

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

function wp_save_last_login( $login, $user ) {
    update_user_meta( $user->ID, 'last_login', current_time( 'timestamp' ) );
}
add_action( 'wp_login', 'wp_save_last_login', 10, 2 );

Этот хук срабатывает при каждом успешном входе и обновляет метаполе last_login.

Пошаговое решение: автоматическое удаление пользователей неактивных более 180 дней

1. Создаём функцию для удаления

function wp_delete_inactive_users() {
    $threshold = strtotime( '-180 days' ); // 180 дней назад
    $args = array(
        'meta_key' => 'last_login',
        'meta_value' => $threshold,
        'meta_compare' => '<',
        'fields' => 'ID',
        'number' => 100,
    );
    $users = get_users( $args );

    foreach ( $users as $user_id ) {
        // Исключаем администраторов и редакторов
        $user = get_userdata( $user_id );
        if ( in_array( 'administrator', $user->roles ) || in_array( 'editor', $user->roles ) ) {
            continue;
        }
        wp_delete_user( $user_id );
    }
}

2. Автоматизируем запуск через WP-Cron

Добавим событие, которое будет запускать очистку раз в сутки.

function wp_schedule_inactive_user_cleanup() {
    if ( ! wp_next_scheduled( 'wp_inactive_user_cleanup_hook' ) ) {
        wp_schedule_event( time(), 'daily', 'wp_inactive_user_cleanup_hook' );
    }
}
add_action( 'wp', 'wp_schedule_inactive_user_cleanup' );

add_action( 'wp_inactive_user_cleanup_hook', 'wp_delete_inactive_users' );

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

  • Создайте тестового пользователя, не входившего в систему более 180 дней (можно вручную установить last_login в прошлом).
  • Запустите функцию wp_delete_inactive_users() вручную через консоль WP-CLI: wp eval 'wp_delete_inactive_users();'.
  • Проверьте, что тестовый пользователь удалён из базы.
  • Для проверки автоматического запуска можно временно изменить период на 1 день и проверить Cron через wp cron event list.

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

  • Отсутствие метаполя last_login у пользователей. Решение: убедитесь, что код, сохраняющий дату входа, активен и работает.
  • Удаление администраторов или важных пользователей. Добавляйте проверки ролей, как показано в примере, чтобы не удалить критичных аккаунтов.
  • Функция не запускается автоматически. Проверьте, работает ли WP-Cron и нет ли конфликтов с плагинами, блокирующими Cron.
  • Производительность при большом количестве пользователей. Ограничивайте количество пользователей за один проход (параметр number), чтобы избежать таймаутов.

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

  • Не удаляйте пользователей без резервного копирования базы данных.
  • Используйте WP-CLI для безопасного ручного запуска и отладки.
  • Исключайте из удаления пользователей с особыми ролями и тех, кто недавно изменялся.
  • Для больших сайтов рассмотрите пакетную обработку с отслеживанием прогресса.
  • Для мониторинга можно добавить логирование удалений в файл или таблицу базы.

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

МетодПреимуществаНедостатки
Плагин (например, Inactive User Deleter)Удобство, готовый функционал, поддержкаЗависимость от стороннего кода, возможные конфликты
Кастомный код с WP-Cron (как в статье)Гибкость, полное управление, отсутствие лишних функцийТребует навыков, ответственность за ошибки
Удаление вручную через WP-CLIБезопасность и контрольНеавтоматизировано, требует регулярного вмешательства
Как удалить все записи WordPress одной кнопкой
09.12.2025
Как использовать WP-Cron для автоматического удаления старого контента в WordPress
11.05.2026
Как избежать конфликтов между плагинами WordPress: практические советы и примеры
16.02.2026
Как устранить ошибку 429 Too Many Requests в WordPress
13.03.2026
Как создать и использовать собственные REST API эндпоинты в WordPress
03.04.2026