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

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

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

Неактивных пользователей стоит удалять или деактивировать, особенно если магазин большой и пользователей десятки тысяч. Задача — автоматически находить и удалять таких пользователей по критериям активности.

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

Для удаления пользователей нужно чётко определить, кто считается неактивным. Обычно используют такие критерии:

  • Дата последнего входа в систему (например, более 6 месяцев назад);
  • Отсутствие совершённых заказов;
  • Отсутствие активности на сайте (комментарии, оценки и т.п.).

WooCommerce и WordPress по умолчанию не сохраняют дату последнего входа, поэтому её нужно добавить самостоятельно или использовать плагины.

Как добавить дату последнего входа пользователя

Добавим код, который при каждом входе пользователя обновляет мета-поле last_login с текущей меткой времени:

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

Теперь в базе в таблице wp_usermeta будет храниться время последнего входа.

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

Создадим WP-Cron задачу, которая раз в неделю будет искать и удалять пользователей, которые:

  • Не заходили больше 180 дней;
  • Не совершали ни одного заказа.

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

// Запланировать событие при активации плагина
register_activation_hook(__FILE__, function() {
    if (!wp_next_scheduled('delete_inactive_users_weekly')) {
        wp_schedule_event(time(), 'weekly', 'delete_inactive_users_weekly');
    }
});

// Удалить расписание при деактивации
register_deactivation_hook(__FILE__, function() {
    wp_clear_scheduled_hook('delete_inactive_users_weekly');
});

// Хук для удаления пользователей
add_action('delete_inactive_users_weekly', function() {
    $threshold = strtotime('-180 days', current_time('timestamp'));

    // Получаем ID пользователей, которые не заходили больше 180 дней
    $args = [
        'meta_key' => 'last_login',
        'meta_value' => $threshold,
        'meta_compare' => '<=',
        'fields' => 'ID',
        'role__not_in' => ['administrator', 'shop_manager'], // исключаем админов
        'number' => 100,
    ];

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

    if (empty($user_ids)) return;

    foreach ($user_ids as $user_id) {
        // Проверяем, есть ли заказы у пользователя
        $orders = wc_get_orders([
            'customer_id' => $user_id,
            'limit' => 1,
            'return' => 'ids',
        ]);
        if (empty($orders)) {
            wp_delete_user($user_id);
        }
    }
});

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

Чтобы убедиться, что код работает:

  • Проверьте наличие мета-поля last_login у пользователей в базе wp_usermeta (например, через phpMyAdmin или плагин для управления пользователями).
  • Вручную запросите пользователей, у которых last_login старше 180 дней и проверьте, что они не имеют заказов.
  • Запустите хук вручную в админке через плагин WP Crontrol (https://wordpress.org/plugins/wp-crontrol/) — найдите событие delete_inactive_users_weekly и запустите его.
  • Проверьте, что такие пользователи удалились из базы.

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

  • Отсутствие даты последнего входа: если мета-поле last_login не обновляется, значит не срабатывает хук wp_login. Проверьте, не конфликтуют ли плагины, и что функция подключена.
  • Удаляются администраторы или менеджеры: В коде стоит исключение по ролям, но если роли кастомные, добавьте их в параметр role__not_in.
  • Не удаляются пользователи с заказами: Функция wc_get_orders корректно работает при условии, что WooCommerce активен и заказов нет. Проверьте, что аргументы передаются правильно.
  • WP-Cron не запускается автоматически: На некоторых хостингах WP-Cron отключён, настройте системный cron или запускайте вручную.

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

  • Не удаляйте пользователей без резервной копии базы данных.
  • Выполняйте удаление небольшими партиями (например, 100 пользователей за раз), чтобы не перегрузить сервер.
  • Исключайте из удаления пользователей с ролями администратора и менеджера магазина.
  • Используйте WP Crontrol для мониторинга и ручного запуска cron-событий.
  • Если вы используете плагин Clearfy Pro от WPShop, он может помочь с очисткой базы и оптимизацией.

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

МетодПлюсыМинусы
Ручное удаление через админкуПростой, не требует кодаТрудоёмко, не подходит для большого количества
Плагины очистки базыАвтоматизация, удобный интерфейсЗависимость от стороннего ПО, нагрузка
Самописный код с WP-CronГибкость, контроль, без сторонних плагиновТребует навыков, возможны ошибки в коде
Оптимизация кэширования и удаление старых кэшей в WordPress
02.01.2026
Как исправить ошибку WooCommerce 429 Too Many Requests: практическое решение
03.06.2026
Как создать автоматический импорт PDF-файлов в WordPress
09.04.2026
Как сделать автоматическое удаление старых пользователей в WordPress
12.04.2026
Как создать собственный виджет WordPress
11.11.2025