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

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

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

Если у вас более 10 000 зарегистрированных пользователей, из которых менее 20% активны, стоит задуматься об автоматическом удалении или деактивации неактивных аккаунтов.

Как определить неактивного пользователя WooCommerce

WooCommerce использует стандартную систему пользователей WordPress. Основные параметры для определения активности:

  • Дата последнего входа — если пользователь не заходил на сайт более N месяцев;
  • Дата последнего заказа — если покупок не было более N месяцев;
  • Статус аккаунта — пользователь не заблокирован.

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

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

1. Отслеживание даты последнего входа

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

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

Этот код обновляет мета-поле last_login при каждом входе пользователя.

2. Создание WP-CLI команды для удаления неактивных пользователей

WP-CLI позволяет запускать команды из консоли. Создадим команду, которая удалит пользователей с последним входом старше 6 месяцев и без заказов за это время.

if (defined('WP_CLI') && WP_CLI) {
    WP_CLI::add_command('wc-delete-inactive-users', function() {
        $date_threshold = date('Y-m-d H:i:s', strtotime('-6 months'));
        $args = [
            'role' => 'customer',
            'meta_query' => [
                [
                    'key' => 'last_login',
                    'value' => $date_threshold,
                    'compare' => '<',
                    'type' => 'DATETIME'
                ]
            ],
            'fields' => 'ID',
            'number' => -1
        ];
        $user_ids = get_users($args);
        $deleted_count = 0;
        foreach ($user_ids as $user_id) {
            // Проверяем заказы пользователя
            $orders = wc_get_orders(['customer_id' => $user_id, 'limit' => 1, 'status' => ['wc-completed', 'wc-processing']]);
            if (empty($orders)) {
                wp_delete_user($user_id);
                $deleted_count++;
            }
        }
        WP_CLI::success("Удалено пользователей: $deleted_count");
    });
}

Запустите команду из терминала:

wp wc-delete-inactive-users

3. Автоматизация через cron

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

if (!wp_next_scheduled('wc_delete_inactive_users_event')) {
    wp_schedule_event(time(), 'daily', 'wc_delete_inactive_users_event');
}

add_action('wc_delete_inactive_users_event', function() {
    $date_threshold = date('Y-m-d H:i:s', strtotime('-6 months'));
    $args = [
        'role' => 'customer',
        'meta_query' => [
            [
                'key' => 'last_login',
                'value' => $date_threshold,
                'compare' => '<',
                'type' => 'DATETIME'
            ]
        ],
        'fields' => 'ID',
        'number' => -1
    ];
    $user_ids = get_users($args);
    foreach ($user_ids as $user_id) {
        $orders = wc_get_orders(['customer_id' => $user_id, 'limit' => 1, 'status' => ['wc-completed', 'wc-processing']]);
        if (empty($orders)) {
            wp_delete_user($user_id);
        }
    }
});

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

  • Проверьте наличие мета-поля last_login у пользователей через phpMyAdmin или плагин User Meta Manager.
  • Запустите WP-CLI команду вручную и проверьте, какие пользователи были удалены.
  • В панели администратора WooCommerce убедитесь, что количество клиентов уменьшилось.
  • Мониторьте логи ошибок и убедитесь, что не возникло сбоев при удалении.

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

  • Отсутствие даты последнего входа — если код для обновления last_login не добавлен, фильтр не сработает. Проверьте, что wp_login хук корректно работает.
  • Неправильный формат даты — убедитесь, что в мета-поле дата хранится в формате Y-m-d H:i:s.
  • Удаление активных пользователей — всегда проверяйте наличие заказов перед удалением, как показано в примерах.
  • Проблемы с cron — WP-Cron может не запускаться без посещения сайта. Для надежной работы настройте системный cron на сервере.

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

  • Перед удалением пользователей обязательно создайте резервную копию базы данных.
  • Используйте транзакции, если ваш сервер поддерживает, для предотвращения частичного удаления.
  • Для крупных баз данных разбивайте удаление на партии по 100-200 пользователей, чтобы избежать таймаутов.
  • Логируйте действия скрипта с указанием времени и ID удаленных пользователей для аудита.
  • Тестируйте код на staging-сервере перед внедрением на боевом.

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

МетодПлюсыМинусыКомпромисс
Плагин (например, WP User Manager)Простота, готовый интерфейсМожет грузить сайт, лишний функционалИспользовать на небольших сайтах
Кастомный код с WP-CLIГибкость, высокая производительностьТребует навыков, доступ к SSHОптимально для опытных разработчиков
WP-Cron автоматизацияАвтоматизация без сервера cronЗависит от посещаемости сайтаРекомендуется на сайтах с хорошим трафиком
Как использовать хук WooCommerce для обновления метаданных заказа при оформлении
04.07.2026
Как автоматически удалять незавершённые заказы в WooCommerce
28.05.2026
Как автоматически удалять незавершённые заказы WooCommerce по cron
17.06.2026
Как автоматически удалять отзывы WooCommerce со статусом «На модерации»
14.07.2026
Как создать динамический маркетинговый список клиентов в WordPress с помощью AJAX
21.01.2026