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

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

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

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

  • Большое количество пользователей с ролью customer, у которых нет заказов;
  • Пользователи, зарегистрировавшиеся более 180 дней назад;
  • Отсутствие активности в виде заказов, отзывов, комментариев.

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

Для автоматизации удалений добавим WP-Cron задачу, которая будет запускаться, например, раз в неделю, и удалять клиентов, зарегистрированных более 6 месяцев назад, если у них нет заказов.

1. Создание функции удаления

function wc_delete_inactive_customers_by_registration_date() {
    global $wpdb;
    $date_threshold = date('Y-m-d H:i:s', strtotime('-180 days'));

    // Получаем ID пользователей с ролью customer, зарегистрированных до даты порога
    $user_ids = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->users} WHERE user_registered < %s",
        $date_threshold
    ));

    if (empty($user_ids)) {
        return;
    }

    foreach ($user_ids as $user_id) {
        $user = get_userdata($user_id);
        if (in_array('customer', (array) $user->roles, true)) {
            $orders = wc_get_orders(array(
                'customer_id' => $user_id,
                'limit' => 1
            ));
            // Удаляем пользователя, если заказов нет
            if (empty($orders)) {
                require_once ABSPATH . 'wp-admin/includes/user.php';
                wp_delete_user($user_id);
            }
        }
    }
}

2. Регистрация WP-Cron задачи

add_action('wc_delete_inactive_customers_event', 'wc_delete_inactive_customers_by_registration_date');

function wc_schedule_inactive_customers_deletion() {
    if (!wp_next_scheduled('wc_delete_inactive_customers_event')) {
        wp_schedule_event(time(), 'weekly', 'wc_delete_inactive_customers_event');
    }
}
add_action('wp', 'wc_schedule_inactive_customers_deletion');

3. Очистка при деактивации темы или плагина

function wc_unschedule_inactive_customers_deletion() {
    $timestamp = wp_next_scheduled('wc_delete_inactive_customers_event');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wc_delete_inactive_customers_event');
    }
}
register_deactivation_hook(__FILE__, 'wc_unschedule_inactive_customers_deletion');

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

  • Проверить наличие запланированного события в разделе wp cron event list (через WP-CLI или плагин WP Crontrol).
  • Запустить функцию вручную вызовом wc_delete_inactive_customers_by_registration_date() для проверки.
  • Проверить базу пользователей — должны пропасть клиенты без заказов старше 180 дней.
  • Убедиться, что активные клиенты и администраторы не удалены.

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

  • Ошибка: Пользователи не удаляются.
    Причина: Неправильное использование ролей или неверная проверка заказов.
    Решение: Проверьте, что роль customer действительно установлена, и используйте wc_get_orders() с правильными параметрами.
  • Ошибка: WP-Cron событие не запускается.
    Причина: WP-Cron зависит от посещений сайта.
    Решение: Используйте системный cron для вызова wp-cron.php или плагин WP Crontrol для отладки.
  • Ошибка: Удаляются активные клиенты.
    Причина: Ошибка в логике проверки заказов.
    Решение: Добавьте дополнительные проверки, например, наличие хотя бы одного заказа со статусом completed или processing.

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

  • Резервное копирование: Перед массовым удалением пользователей делайте резервную копию базы данных.
  • Пакетная обработка: Если пользователей много, обрабатывайте их партиями (например, по 50 за раз), чтобы избежать таймаута скрипта.
  • Ограничение по ролям: Убедитесь, что не удаляете пользователей с административными правами.
  • Логирование: Добавьте запись в лог удалённых пользователей для аудита.

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

МетодПлюсыМинусыПример
Ручное удаление через админку Просто, не требует кода Неэффективно при большом количестве Панель пользователей WooCommerce
Плагин для очистки пользователей Удобно, встроенный интерфейс Может замедлять сайт, зависимость от плагина User Cleanup, WP Bulk Delete
Автоматизация через WP-Cron и код Гибко, без сторонних плагинов, контролируемо Требует навыков разработки, настройка cron Код из статьи
WooCommerce: автоматическое удаление заказов по неактивности
28.05.2026
Настройка и создание кастомных всплывающих окон в WordPress
27.01.2026
WooCommerce: автоматическое удаление заказов по просроченной оплате
21.07.2026
Как добавить автоподсказки в поиск WordPress
05.01.2026
WooCommerce: настройка и использование различных методов оплаты
16.05.2026