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

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

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

Критерии неактивности обычно включают:

  • Отсутствие заказов;
  • Отсутствие активности на сайте длительное время (например, 1 год);
  • Отсутствие входа в аккаунт.

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

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

WooCommerce хранит пользователей в таблице wp_users, а заказы — в wp_posts с типом shop_order. Активность пользователя можно оценить по следующим параметрам:

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

Пример запроса для поиска пользователей без заказов и без активности более года

SELECT u.ID 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')
WHERE p.ID IS NULL
AND u.user_registered < DATE_SUB(NOW(), INTERVAL 1 YEAR)
AND u.ID NOT IN (SELECT user_id FROM wp_usermeta WHERE meta_key = 'wp_capabilities' AND meta_value LIKE '%administrator%');

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

Для автоматизации используем WP-CLI или PHP-скрипт с хуком wp_loaded и планировщиком задач WordPress (WP-Cron).

Пример функции удаления неактивных пользователей по критериям

function wc_delete_inactive_customers() {
    global $wpdb;
    $date_limit = date('Y-m-d H:i:s', strtotime('-1 year'));

    // Получаем ID пользователей без заказов и с датой регистрации < 1 год назад, исключая администраторов
    $user_ids = $wpdb->get_col($wpdb->prepare(
        "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')
        WHERE p.ID IS NULL AND u.user_registered < %s
        AND u.ID NOT IN (
            SELECT user_id FROM {$wpdb->usermeta}
            WHERE meta_key = %s AND meta_value LIKE %s
        )",
        $date_limit,
        $wpdb->esc_like('wp_capabilities'),
        '%administrator%'
    ));

    if (empty($user_ids)) {
        return 'No inactive users found.';
    }

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

    return count($user_ids) . ' inactive users deleted.';
}

// Регистрация WP-Cron задачи
add_action('wc_delete_inactive_customers_daily', 'wc_delete_inactive_customers');

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

Этот код удалит пользователей, которые не сделали ни одного заказа, зарегистрированы более года назад и не являются администраторами. Для запуска немедленно можно вызвать функцию напрямую через WP-CLI или добавить временно вызов в functions.php.

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

  • Проверьте список пользователей в админке WooCommerce — не должно быть удалённых клиентов, которые делали заказы.
  • Запустите SQL-запрос для проверки пользователей без заказов и убедитесь, что их осталось меньше.
  • Просмотрите лог WP-Cron (плагин WP Crontrol или аналог) — должна появляться задача wc_delete_inactive_customers_daily и успешные выполнения.
  • Тестируйте на копии сайта, чтобы избежать потери данных.

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

  • Удаление нужных пользователей: Неправильно настроенный фильтр ролей — проверяйте условие исключения администраторов и других ролей.
  • Пользователи с заказами удаляются: Проверьте статус заказов, иногда заказы не в статусах wc-completed или wc-processing, добавьте нужные статусы.
  • WP-Cron не срабатывает: На некоторых серверах WP-Cron отключён, настройте системный cron или запускайте вручную через WP-CLI.
  • Ошибка при удалении пользователя: Убедитесь, что подключен файл wp-admin/includes/user.php и права доступа корректны.

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

  • Перед автоматическим удалением сделайте резервную копию базы данных.
  • Запускайте удаление в низкую нагрузку сервера, чтобы избежать таймаутов.
  • Используйте WP-CLI для массовых операций — быстрее и безопаснее.
  • Логируйте удалённые ID пользователей для аудита.
  • Если много пользователей, разбивайте удаление на партии по 50–100, чтобы не перегружать сервер.

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

МетодПлюсыМинусы
WP-Cron + PHP-скрипт (как в статье)Полный контроль, бесплатно, настраиваемая логикаЗависит от WP-Cron, требует навыков программирования
Плагин очистки пользователейПростота настройки, интерфейсМожет не учитывать все нюансы, нагрузка на сайт
WP-CLI скриптВысокая производительность, можно запускать вручнуюТребует доступа к серверу, командной строки
WooCommerce: автоматическое отключение товаров при отсутствии запасов в настройках складского учёта
08.07.2026
Миграция пользователей между сайтами WordPress: пошаговое руководство с примерами кода
26.12.2025
Как создать динамические табличные каталоги в WordPress с помощью шорткода
17.04.2026
Как удалить условие загрузки картинок в WordPress для оптимизации скорости
02.01.2026
WooCommerce: как исправить неработающие кнопки «Купить» после обновления
31.05.2026