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

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

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

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

Под неактивными обычно понимают пользователей, у которых нет заказов в течение определённого периода (например, 12 месяцев) или которые не заходили в профиль.

В WooCommerce дата последнего заказа хранится в таблице wp_posts с типом shop_order, связанным с пользователем через post_author.

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

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

Ниже функция на PHP, которая ищет пользователей с ролью customer, у которых последний заказ старше 12 месяцев (365 дней) и удаляет их из базы.

function delete_inactive_woocommerce_customers() {
    global $wpdb;
    $interval_days = 365; // период неактивности
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$interval_days} days"));

    // Получаем ID пользователей с ролью customer
    $customers = get_users(array(
        'role' => 'customer',
        'fields' => array('ID')
    ));

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

    foreach ($customers as $user_id) {
        // Получаем дату последнего заказа пользователя
        $last_order_date = $wpdb->get_var($wpdb->prepare(
            "SELECT MAX(post_date) FROM {$wpdb->prefix}posts WHERE post_type = 'shop_order' AND post_status IN ('wc-completed', 'wc-processing') AND post_author = %d",
            $user_id
        ));

        // Если заказов нет или последний заказ старше порога — удаляем пользователя
        if (empty($last_order_date) || $last_order_date < $date_threshold) {
            require_once(ABSPATH . 'wp-admin/includes/user.php');
            wp_delete_user($user_id);
        }
    }
}

Шаг 2. Запускаем функцию по расписанию с помощью WP-Cron

Чтобы удаление происходило автоматически, создадим событие WP-Cron, запускающее функцию раз в месяц.

if (!wp_next_scheduled('delete_inactive_customers_monthly')) {
    wp_schedule_event(time(), 'monthly', 'delete_inactive_customers_monthly');
}
add_action('delete_inactive_customers_monthly', 'delete_inactive_woocommerce_customers');

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

Чтобы убедиться, что удаление работает:

  • Создайте тестового пользователя с ролью customer и без заказов или с очень старым заказом.
  • Запустите функцию вручную, вызвав delete_inactive_woocommerce_customers() через консоль WP-CLI или временно из файла темы.
  • Проверьте, что пользователь удалён из базы (раздел «Пользователи» в админке).
  • Посмотрите логи сервера на ошибки.

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

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

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

  • Всегда делайте резервную копию базы перед массовым удалением пользователей.
  • Добавьте логирование удалённых пользователей в отдельный файл для аудита.
  • Для крупных баз используйте постраничную обработку, чтобы избежать превышения лимитов памяти и времени выполнения.
  • Не удаляйте пользователей сразу после регистрации — используйте период неактивности не менее 6-12 месяцев.
  • Настройте уведомления администратору при удалении пользователей для контроля процесса.

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

МетодПлюсыМинусы
Код в functions.php с WP-CronГибкость, без плагинов, можно адаптировать под задачиТребует навыков, возможны ошибки при обновлениях
Плагины очистки базы (например, WP Sweep, Advanced Database Cleaner)Простота использования, визуальный интерфейсНе всегда учитывают бизнес-логику WooCommerce
Внешние скрипты через WP-CLIВысокая производительность, можно запускать вручнуюНужен доступ к серверу, командная строка
Как настроить автоматическую обработку формы обратной связи в WordPress
11.04.2026
Как удалить или изменить автора постов в WordPress без плагинов
06.12.2025
Как создать автоматический генератор изображений в WordPress
07.04.2026
WooCommerce: автоматическое удаление неактивных заказов по статусу и времени
09.06.2026
Как автоматически удалять неактивные вариации товаров в WooCommerce с помощью кода
07.05.2026