Как автоматически удалять неактивных пользователей WordPress с помощью кода

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

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

Проверка актуальности пользователей — важная задача для оптимизации и поддержания порядка. Но как автоматизировать удаление таких аккаунтов, не рискуя потерять важных участников?

Определяем неактивных пользователей

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

Добавление записи последнего входа

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

Этот код записывает временную метку последнего входа в метаданные пользователя под ключом _last_login.

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

1. Создаем функцию для выборки и удаления

function delete_inactive_users() {
    $days_inactive = 180; // 6 месяцев
    $cutoff = strtotime( "-{$days_inactive} days" );

    $args = array(
        'meta_key' => '_last_login',
        'meta_value' => $cutoff,
        'meta_compare' => '<',
        'fields' => 'ID',
        'number' => 100, // лимит на партию
        'exclude' => array(1), // исключаем admin с ID 1
    );

    $user_query = new WP_User_Query( $args );
    $users_to_delete = $user_query->get_results();

    if ( empty( $users_to_delete ) ) {
        return;
    }

    foreach ( $users_to_delete as $user_id ) {
        require_once ABSPATH . 'wp-admin/includes/user.php';
        wp_delete_user( $user_id );
    }
}

2. Настраиваем запуск функции через WP-Cron

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

add_action( 'delete_inactive_users_event', 'delete_inactive_users' );

Этот код запускает проверку и удаление неактивных пользователей ежедневно.

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

  • В админке WordPress перейдите в Пользователи и отфильтруйте по дате последнего входа, используя метаполе _last_login (для этого можно временно вывести данные через плагин типа Admin Columns).
  • Проверьте логи сервера или добавьте логирование в функцию удаления, например, с помощью error_log() для подтверждения удаления пользователей.
  • Проверьте, что пользователи с датой входа старше 180 дней удаляются, а активные остаются.

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

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

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

  • Для безопасности добавьте резервное копирование пользователей перед удалением, например, экспорт их данных через WP-CLI или плагин.
  • Перед удалением можно отправлять уведомления пользователям о предстоящем удалении с просьбой войти на сайт.
  • Для ускорения выборки добавьте индекс на метаполе _last_login в таблице wp_usermeta через SQL, если база большая.
  • Проверяйте, что удаление пользователей не влияет на связанные данные (посты, комментарии). По умолчанию посты останутся, но можно изменить поведение в wp_delete_user.

Сравнение подходов к удалению неактивных пользователей

МетодПреимуществаНедостатки
Ручное удаление через админкуПростота, контрольТрудоемко, риск ошибки
Плагины (например, Inactive User Deleter)Готовое решение, настройкиДополнительная нагрузка, возможные конфликты
Код с WP-Cron (описанный выше)Автоматизация, кастомизацияТребует настройки, зависит от WP-Cron
Оптимизация памяти WordPress: эффективные методы и примеры с wpstandart
10.12.2025
Как создать уникальный клиентский API в WordPress для обмена данными
26.12.2025
Автоматическое удаление неактивных пользователей в WordPress: практическое руководство
19.06.2026
Как удалить PHP ошибки в WordPress: практические советы и примеры
05.11.2025
Как использовать хук WooCommerce checkout_update_order_meta для добавления данных к заказу
29.04.2026