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

Проблема: накопление неактивных пользователей в WooCommerce

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

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

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

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

В WooCommerce информация о заказах хранится в таблице wp_posts с типом записи shop_order, связь с пользователем — через post_author. Активность пользователя можно проверить по дате последнего заказа или дате последнего входа (если ведётся лог). Если логина нет, можно ориентироваться только на заказы.

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

1. Создание функции для поиска неактивных пользователей

Пример функции, которая получает ID пользователей без заказов за последний год:

function get_inactive_customers( $months = 12 ) {
    global $wpdb;
    $date_threshold = date( 'Y-m-d H:i:s', strtotime( "-{$months} months" ) );

    $users = $wpdb->get_col( $wpdb->prepare(
        "SELECT u.ID FROM {$wpdb->users} u
         LEFT JOIN {$wpdb->prefix}posts p ON p.post_author = u.ID AND p.post_type = 'shop_order' AND p.post_status IN ('wc-completed', 'wc-processing') AND p.post_date > %s
         WHERE p.ID IS NULL",
         $date_threshold
    ) );

    return $users;
}

2. Функция удаления пользователей

Удаляем пользователей по ID вместе с метаданными:

function delete_inactive_customers() {
    $users = get_inactive_customers( 12 ); // за 12 месяцев

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

3. Автоматизация через WP-Cron

Добавляем ежемесячное событие, чтобы очищать базу регулярно:

add_action( 'wp', function() {
    if ( ! wp_next_scheduled( 'delete_inactive_customers_event' ) ) {
        wp_schedule_event( time(), 'monthly', 'delete_inactive_customers_event' );
    }
});

add_action( 'delete_inactive_customers_event', 'delete_inactive_customers' );

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

  • Проверьте список пользователей через phpMyAdmin или wp-cli: wp user list --role=customer — количество должно уменьшиться;
  • В админке WordPress в разделе «Пользователи» убедитесь, что старые неактивные покупатели удалены;
  • Запустите функцию вручную через wp-cli, чтобы протестировать: wp eval 'delete_inactive_customers();';
  • Просмотрите логи сервера на ошибки — если пользователей не удаляет, проверьте права и наличие пользователей с заказами.

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

  • Удаляются активные пользователи: Проверьте правильность условий выборки и статусы заказов. Используйте только статусы wc-completed и wc-processing.
  • Функция ничего не удаляет: Возможно, у всех пользователей есть хотя бы один заказ за последний год. Можно уменьшить порог в функции get_inactive_customers().
  • Пользователи с ролями, отличными от покупателя, удаляются: Добавьте проверку роли в запросе или фильтруйте результат функцией get_userdata().
  • WP-Cron не запускается: На хостинге может быть отключён WP-Cron. Запланируйте системное задание (cronjob) для вызова wp-cron.php.

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

  • Перед удалением пользователей сделайте резервную копию базы данных.
  • Добавьте журналирование, чтобы знать, кто и когда был удалён.
  • Чтобы не нагружать базу, обрабатывайте пользователей партиями (например, по 50 за раз).
  • Ограничьте права запуска функции только администраторам или через wp-cli.
  • Для крупных магазинов с тысячами пользователей используйте WP-CLI-скрипты для пакетной обработки.

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

МетодПлюсыМинусы
PHP-скрипт с WP-CronАвтоматизация, полный контроль над логикойНужно писать и тестировать код, зависимость от cron
Плагины очистки пользователей (например, Cleanup Users)Простота, интерфейсМогут не учитывать сложные условия заказов
Ручное удаление через админкуПростота, безопасностьНе подходит для больших баз, трудозатратно
WooCommerce: как автоматически очистить кеш после обновления товара
29.05.2026
WooCommerce: как удалить старые вариации товаров и ускорить базу
13.05.2026
Как автоматически удалять записи по статусу в WordPress
12.04.2026
Как отключить отзывы на одиночных страницах WordPress
28.03.2026
Как создать адаптивный блок товара в WooCommerce с помощью хуков
05.01.2026