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

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

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

  • увеличению нагрузки на базу данных;
  • усложнению рассылок и маркетинга из-за устаревших контактов;
  • риску безопасности при хранении неиспользуемых аккаунтов.

Удаление неактивных клиентов на основе истории заказов помогает автоматически поддерживать базу в актуальном и оптимальном состоянии.

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

Основной критерий — отсутствие заказов в заданный период, например, 6 или 12 месяцев. Мы можем проверить дату последнего заказа пользователя и удалить аккаунт, если заказов нет или последний заказ старше нужного срока.

Пример SQL-запроса для проверки неактивных пользователей

SELECT u.ID, u.user_email, MAX(p.post_date) AS last_order_date
FROM wp_users u
LEFT JOIN wp_posts p ON p.post_author = u.ID AND p.post_type = 'shop_order' AND p.post_status IN ('wc-completed', 'wc-processing')
GROUP BY u.ID
HAVING (last_order_date IS NULL OR last_order_date < DATE_SUB(NOW(), INTERVAL 12 MONTH));

Этот запрос получает пользователей, у которых нет заказов или последний заказ старше 12 месяцев.

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

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

function wpbit_delete_inactive_customers() {
    global $wpdb;
    
    // Получаем пользователей без заказов или с заказами старше 12 месяцев
    $users = $wpdb->get_results(
        "SELECT u.ID FROM {$wpdb->users} u
         LEFT JOIN {$wpdb->posts} p ON p.post_author = u.ID AND p.post_type = 'shop_order' AND p.post_status IN ('wc-completed', 'wc-processing')
         GROUP BY u.ID
         HAVING MAX(p.post_date) IS NULL OR MAX(p.post_date) < DATE_SUB(NOW(), INTERVAL 12 MONTH)"
    );

    if (!empty($users)) {
        foreach ($users as $user) {
            require_once(ABSPATH . 'wp-admin/includes/user.php');
            wp_delete_user($user->ID);
        }
    }
}

2. Добавляем запуск через WP-Cron

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

add_action('wpbit_delete_inactive_customers_hook', 'wpbit_delete_inactive_customers');

Этот код будет запускать проверку и удаление пользователей ежедневно.

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

  • Выполните запрос из раздела диагностики напрямую к базе (например, через phpMyAdmin) и сравните с количеством пользователей в панели WordPress.
  • Добавьте временный лог внутри функции удаления для фиксации удаленных пользователей. Например:
error_log('Deleted user ID: ' . $user->ID);
  • Проверьте, что после запуска Cron неактивные учетные записи исчезают из списка пользователей WordPress.

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

  • Удаляются администраторы и важные пользователи: В функцию стоит добавить исключения по ролям, чтобы не удалять админов.
  • WP-Cron не запускается: Это частая проблема при низкой посещаемости сайта. Проверьте работу Cron вручную или настройте системный cron на сервере.
  • SQL-запрос не учитывает все статусы заказов: Убедитесь, что в запросе перечислены статусы, которые вы считаете активными (например, 'wc-completed', 'wc-processing').

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

  • Перед удалением сделайте резервную копию базы данных.
  • Добавьте проверку ролей, чтобы не удалять пользователей с правами администратора и редактора.
  • Для больших сайтов используйте пакетную обработку (например, удаляйте по 50 пользователей за раз), чтобы избежать превышения лимита памяти или времени выполнения скрипта.
  • Рассмотрите плагин Clearfy Pro (https://wpshop.ru/plugins/clearfy?utm_source=wpbit.ru&utm_medium=article&utm_campaign=woocommerce-avtomaticheskoe-udaleniye-neaktivnyh-klientov-po-istorii-zakazov) для расширенной оптимизации базы и управления пользователями.

Итоговый чек-лист для настройки автоматического удаления неактивных клиентов

  • Определить период неактивности (например, 12 месяцев).
  • Написать и протестировать SQL-запрос для выборки неактивных пользователей.
  • Реализовать функцию удаления с фильтрацией по ролям.
  • Настроить WP-Cron для регулярного запуска функции.
  • Провести тестирование на тестовой среде перед внедрением в продакшен.
  • Создать резервные копии перед первыми запусками.
  • Добавить логирование для контроля удалений.
Как автоматизировать удаление старых неиспользуемых медиафайлов в WordPress
07.03.2026
WooCommerce: как автоматически удалять товары из магазина по статусу заказов
10.05.2026
WooCommerce: как автоматически удалять товары из магазина по статусу заказов
06.05.2026
Автоматизация обновления подписок в WordPress через AJAX
21.01.2026
Как установить автоматическое отображение отзывов в WordPress
03.04.2026