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

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

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

Как определить, кто считается неактивным пользователем?

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

Добавляем запись даты последнего входа

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

function wpcommunity_update_last_login( $user_login, $user ) {
    update_user_meta( $user->ID, 'last_login', current_time('mysql') );
}
add_action( 'wp_login', 'wpcommunity_update_last_login', 10, 2 );

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

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

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

function wpcommunity_delete_inactive_users() {
    $threshold = strtotime( '-6 months' ); // Удалять пользователей, не заходивших 6 месяцев
    $args = [
        'meta_key' => 'last_login',
        'meta_value' => date('Y-m-d H:i:s', $threshold),
        'meta_compare' => '<',
        'fields' => 'ID',
        'number' => 100, // Обрабатываем по 100 пользователей за раз
    ];
    $user_query = new WP_User_Query( $args );
    if ( ! empty( $user_query->results ) ) {
        foreach ( $user_query->results as $user_id ) {
            // Не удаляем администраторов
            if ( in_array('administrator', get_userdata($user_id)->roles) ) {
                continue;
            }
            wp_delete_user( $user_id );
        }
    }
}

2. Запускаем функцию по расписанию с помощью WP-Cron

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

function wpcommunity_schedule_user_cleanup() {
    if ( ! wp_next_scheduled( 'wpcommunity_weekly_user_cleanup' ) ) {
        wp_schedule_event( time(), 'weekly', 'wpcommunity_weekly_user_cleanup' );
    }
}
add_action( 'wp', 'wpcommunity_schedule_user_cleanup' );

add_action( 'wpcommunity_weekly_user_cleanup', 'wpcommunity_delete_inactive_users' );

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

1. Проверьте, что у пользователей появляется метаполе last_login после входа.

2. Запустите функцию удаления вручную для теста, вызвав wpcommunity_delete_inactive_users() через WP-CLI или временно из админки.

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

4. Проверьте логи ошибок сервера и базы данных на предмет сбоев.

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

  • Дата последнего входа не сохраняется. Проверьте, что хук wp_login подключен и код добавлен в правильное место. Для теста выполните вход и проверьте метаполя пользователя через phpMyAdmin или WP-CLI.
  • Удаляются администраторы. Добавьте проверку ролей перед удалением, как в приведенном коде. Если роли хранятся нестандартно — исправьте проверку.
  • Запланированное событие WP-Cron не срабатывает. Проверьте, что на сайте посещения есть (WP-Cron зависит от трафика) или настройте системный crontab для вызова wp-cron.php.
  • Удаление занимает много времени и вызывает таймауты. Уменьшите параметр number в WP_User_Query для обработки меньших партий пользователей.

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

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

Сравнение способов реализации автоматического удаления пользователей

МетодПреимуществаНедостатки
WP-Cron + usermeta (как в статье) Простота, интеграция с WordPress, без доп. плагинов Зависимость от трафика, возможны таймауты при большом количестве пользователей
Внешний системный cron + WP-CLI Надежность, можно запускать в любое время, подходит для больших сайтов Требует доступа к серверу, знания CLI
Плагин для управления пользователями Удобный интерфейс, расширенные возможности Дополнительная нагрузка, возможные конфликты с другими плагинами
Как удалить варианты товаров WooCommerce при удалении атрибута
26.04.2026
Как удалить неиспользуемые таблицы в базе данных WordPress для оптимизации
20.11.2025
Как удалить проблемы с вариантами товаров в WooCommerce: практическое руководство
23.04.2026
Как автоматизировать удаление неактивных пользователей в WordPress по срокам
03.07.2026
Как создать автоматическую систему отзывов в WordPress с модерацией и уведомлениями
27.01.2026

Задать вопрос о вордпресс, получить ответ - это все можно сделать в нашем сообществе WP. Сайт в данный момент в разработке, изучите ссылки ниже: