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

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

С ростом интернет-магазина на WooCommerce база покупателей может быстро разрастаться. При этом часть пользователей перестает совершать покупки, что приводит к увеличению объема данных в базе и снижению производительности, особенно если установлен плагин для рассылок или аналитики, работающий с пользователями. Автоматическое удаление неактивных покупателей, у которых не было заказов за определенный период, позволяет поддерживать базу в актуальном состоянии и ускорять работу сайта.

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

В WooCommerce покупатели — это пользователи WordPress с ролью customer или subscriber. Обычно активность определяется наличием заказов. Для удаления нужно сравнить дату последнего заказа пользователя с текущей датой и удалить тех, у кого не было заказов дольше установленного периода.

Какие данные нужны для проверки активности

  • ID пользователя
  • Дата последнего заказа (post_type = 'shop_order')
  • Роль пользователя (должна быть customer/subscriber или другая, если настроена)

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

Ниже приведен пример кода, который можно добавить в файл functions.php вашей темы или в отдельный плагин. Скрипт удаляет пользователей, у которых не было заказов более 180 дней.

function wpkpi_delete_inactive_customers() {
    $days_inactive = 180; // Порог неактивности в днях
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_inactive . ' days'));

    // Получаем всех пользователей с ролью customer
    $args = [
        'role' => 'customer',
        'fields' => ['ID'],
        'number' => -1
    ];
    $users = get_users($args);

    foreach ($users as $user) {
        $user_id = $user->ID;

        // Получаем последний заказ пользователя
        $last_order = wc_get_orders([
            'customer_id' => $user_id,
            'limit' => 1,
            'orderby' => 'date',
            'order' => 'DESC',
            'return' => 'objects'
        ]);

        if (empty($last_order)) {
            // Пользователь не делал ни одного заказа, можно удалить сразу
            wp_delete_user($user_id);
            continue;
        }

        $order_date = $last_order[0]->get_date_created()->date('Y-m-d H:i:s');

        // Если последний заказ старше порога, удаляем пользователя
        if ($order_date < $date_threshold) {
            wp_delete_user($user_id);
        }
    }
}

// Запускать функцию через WP-Cron или вручную
// add_action('wpkpi_daily_cleanup', 'wpkpi_delete_inactive_customers');
// Для теста вызовите напрямую:
// wpkpi_delete_inactive_customers();

Как настроить автоматический запуск

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

function wpkpi_setup_daily_cleanup() {
    if (!wp_next_scheduled('wpkpi_daily_cleanup')) {
        wp_schedule_event(time(), 'daily', 'wpkpi_daily_cleanup');
    }
}
add_action('wp', 'wpkpi_setup_daily_cleanup');
add_action('wpkpi_daily_cleanup', 'wpkpi_delete_inactive_customers');

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

  • Зайдите в раздел «Пользователи» в админке WordPress и посмотрите, исчезли ли те покупатели, у которых не было заказов дольше 180 дней.
  • Можете временно заменить wp_delete_user($user_id); на error_log('User to delete: ' . $user_id); и посмотреть логи, какие пользователи попадут под удаление.
  • Для проверки последнего заказа конкретного пользователя используйте функцию wc_get_orders с фильтром по ID клиента.

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

  • Удаление не тех пользователей: Проверьте, что правильно указана роль пользователя. В некоторых магазинах могут использовать другие роли, например, subscriber или кастомные.
  • Не срабатывает функция удаления: Убедитесь, что скрипт запускается. Для автоматического запуска настройте WP-Cron или запускайте функцию вручную.
  • Удаление пользователей с действующими подписками: Если используете подписки WooCommerce Subscriptions, добавьте дополнительную проверку статуса подписок перед удалением.
  • Проблемы с производительностью при большом количестве пользователей: Разбивайте обработку на партии по 100-200 пользователей, чтобы избежать таймаутов.

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

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

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

МетодПлюсыМинусы
Ручное удаление через админкуПростота, контрольТрудоемко, не подходит для большого количества
Скрипт с wp_delete_user()Автоматизация, гибкость настроекТребует тестирования, может удалить важные аккаунты
Плагины очистки базыГрафический интерфейс, дополнительные функцииМогут быть тяжелыми, не всегда гибкие
Как отладить проблемы со вставкой кода в WordPress
24.11.2025
Как создать собственный тип записей (Custom Post Type) в WordPress
09.02.2026
Как отладить проблемы с отправкой форм в WordPress
01.04.2026
Как добавить вывод данных из метаполя в WordPress теме
16.01.2026
Как отследить посещаемость сайта на WordPress: лучшие методы и плагины
01.12.2025