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

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

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

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

1. Определение критерия неактивности

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

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

WordPress по умолчанию не хранит дату последнего входа. Добавим эту возможность с помощью хука wp_login:

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 при каждом входе пользователя.

3. Создание WP-Cron задачи для удаления неактивных пользователей

Добавим функцию, которая будет искать и удалять пользователей, не заходивших более 180 дней:

function wpcommunity_delete_inactive_users() {
    $threshold = date( 'Y-m-d H:i:s', strtotime( '-180 days' ) );
    
    $args = array(
        'meta_key'     => 'last_login',
        'meta_value'   => $threshold,
        'meta_compare' => '<',
        'fields'       => 'ID',
        'number'       => 100,
    );

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

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

if ( ! wp_next_scheduled( 'wpcommunity_daily_inactive_user_cleanup' ) ) {
    wp_schedule_event( time(), 'daily', 'wpcommunity_daily_inactive_user_cleanup' );
}
add_action( 'wpcommunity_daily_inactive_user_cleanup', 'wpcommunity_delete_inactive_users' );

Этот код проверяет пользователей с last_login старше 180 дней и удаляет их. Задача запускается ежедневно.

4. Обработка пользователей без даты входа

Если у пользователя нет мета-поля last_login, он либо не заходил ни разу, либо поле не установлено. Чтобы не пропустить таких пользователей, расширим запрос:

$args = array(
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key'     => 'last_login',
            'value'   => $threshold,
            'compare' => '<',
            'type'    => 'DATETIME',
        ),
        array(
            'key'     => 'last_login',
            'compare' => 'NOT EXISTS',
        ),
    ),
    'fields' => 'ID',
    'number' => 100,
);

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

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

  • Зарегистрируйте тестового пользователя и не входите под ним 6+ месяцев — для проверки подойдут временные изменения даты last_login в базе.
  • Вручную запустите функцию wpcommunity_delete_inactive_users() через WP CLI или временно вызовите в тему.
  • Проверьте, что пользователь удален из базы данных (таблица wp_users).
  • Проверьте наличие запланированного Cron-задачи: wp cron event list или плагины типа WP Crontrol.

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

  • Отсутствие записи даты входа: если код обновления last_login не подключён, функция удаления не работает корректно. Проверьте, что хук wp_login работает и мета-поле создаётся.
  • Удаление администраторов: функция может удалить админов, если они не заходили долго. Добавьте защиту, например, исключая роли администраторов:
$args['role__not_in'] = array('Administrator');
  • Проблемы с WP-Cron: если сайт малопосещаемый, Cron-задачи не запускаются вовремя. Можно настроить системный CRON для вызова wp-cron.php.
  • Удаление пользователей с важными данными: перед удалением убедитесь, что данные пользователя не нужны. Можно отправлять уведомление о предстоящем удалении.

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

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

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

МетодОписаниеПлюсыМинусы
ПлагинИспользование готовых плагинов удаления неактивных пользователейПростота установки, готовый функционалМожет быть избыточным, нагрузка, ограничения настроек
Собственный код (как в статье)Самописная реализация на базе WP-Cron и хуковГибкость, контроль, минимальная нагрузкаТребует технических навыков, нужно тестировать
Удаление вручнуюРучной поиск и удаление через админку или SQLПростота, точечностьТрудоемко, риск ошибок, неавтоматично
Как использовать фильтры для изменения цены в WooCommerce по условию
29.04.2026
Как использовать методы для удаления вариативных товаров WooCommerce при удалении атрибута
09.06.2026
Как добавить дополнительные поля в форму регистрации WordPress
24.01.2026
Как избежать проблем с разным форматом даты в WooCommerce
13.06.2026
Как автоматизировать удаление старого контента в WordPress
13.01.2026

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