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

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

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

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

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

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

В WooCommerce клиент - это пользователь WordPress с ролью customer или subscriber. Для оценки активности подходят следующие параметры:

  • Дата последнего заказа (wp_posts.post_date с типом shop_order и связью с пользователем);
  • Дата последнего входа (если ведется лог входов, например, через плагин);
  • Дата регистрации пользователя (user_registered в таблице wp_users).

Минимальный критерий — отсутствие заказов и входов в течение года.

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

Реализуем PHP-функцию, которую можно запускать через WP-CLI или cron, для удаления клиентов без заказов и без активности в последний год.

1. Определяем пользователей без заказов за год

function wpb_get_inactive_customers($days_inactive = 365) {
    global $wpdb;
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days_inactive} days"));

    $query = $wpdb->prepare(
        "SELECT u.ID FROM {$wpdb->users} u
         LEFT JOIN {$wpdb->prefix}wc_order_stats o ON u.ID = o.customer_id AND o.date_created > %s
         WHERE o.customer_id IS NULL
         AND u.user_registered < %s
         AND u.ID IN (
            SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key = '{$wpdb->prefix}capabilities' 
            AND meta_value LIKE '%customer%'
         )",
        $date_threshold,
        $date_threshold
    );

    return $wpdb->get_col($query);
}

2. Удаляем пользователей по ID с проверкой

function wpb_delete_inactive_customers() {
    $inactive_customers = wpb_get_inactive_customers();
    if (empty($inactive_customers)) {
        error_log('No inactive customers found');
        return;
    }

    foreach ($inactive_customers as $user_id) {
        require_once ABSPATH . 'wp-admin/includes/user.php';
        wp_delete_user($user_id);
        error_log('Deleted user ID: ' . $user_id);
    }
}

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

Добавьте в functions.php или плагин:

if (!wp_next_scheduled('wpb_delete_inactive_customers_event')) {
    wp_schedule_event(time(), 'weekly', 'wpb_delete_inactive_customers_event');
}

add_action('wpb_delete_inactive_customers_event', 'wpb_delete_inactive_customers');

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

  • Запустите функцию вручную из консоли WP-CLI: wp eval 'wpb_delete_inactive_customers();' и проверьте логи ошибок.
  • Проверьте количество пользователей с ролью customer до и после удаления через админку WordPress.
  • Проверьте, что заказы пользователей остались в базе (удаление пользователя не удаляет заказы).

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

  • Ошибка: Пользователи не удаляются — проверьте, есть ли у них роль customer или subscriber. Если роль кастомная, внесите изменения в SQL-запрос.
  • Ошибка: Удаляются активные пользователи — убедитесь, что дата сравнения и статус заказов корректны.
  • Ошибка: WP-Cron не срабатывает — проверьте, работает ли штатный Cron, или настройте системный Cron для wp-cron.php.
  • Ошибка: Удаление пользователей вызывает ошибки из-за плагинов безопасности — временно отключите их при выполнении скрипта.

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

  • Перед массовым удалением сделайте полный бэкап базы данных.
  • Запускайте удаление не чаще раза в неделю, чтобы не нагружать сервер.
  • Используйте wp_delete_user — это безопасный метод с очисткой связанных данных.
  • Если база очень большая, делайте удаление партиями (например, по 50 пользователей) для снижения нагрузки.
  • Не удаляйте пользователей без подтверждения политики конфиденциальности и пользовательских соглашений.

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

МетодПреимуществаНедостатки
Ручное удаление через админкуПросто, не требует кодаТрудоемко при большом количестве, риск пропустить
Автоматизация через WP-Cron и кастомный кодПолная автоматизация, гибкие критерииТребует навыков программирования, риски при ошибках
Плагины для очистки пользователейУдобство интерфейса, готовый функционалМожет влиять на производительность, лишние зависимости
Как использовать хуки в WordPress для расширения функциональности
23.11.2025
Как использовать WPCommunity для создания сообщества на WordPress
23.03.2026
Как исправить ошибку «Не открывается корзина WooCommerce»: практическое руководство
30.06.2026
Автоматическое удаление старых transient через transient в WordPress
15.12.2025
Как устроить авторизацию по телефону в WordPress
06.02.2026