wpdownload.ru wordpress WPDownload.ru

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

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

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

Как определить «неактивного» клиента и «старый» заказ

Для удаления нужно четко определить критерии:

  • Неактивный клиент: пользователь, который не заходил в аккаунт и не совершал покупок более 6 месяцев.
  • Старый заказ: заказ со статусом "выполнен" (completed) или "отменен" (cancelled), которому более 1 года, и по которому не было возвратов или споров.

Пошаговое решение: автоматизация удаления через WP-Cron и кастомный скрипт

1. Добавление функции удаления клиентов и заказов

Создадим функцию, которая будет искать и удалять неактивных пользователей и старые заказы.

function wc_delete_inactive_customers_and_old_orders() {
    // Определяем дату 6 месяцев назад
    $date_inactive = date('Y-m-d H:i:s', strtotime('-6 months'));
    // Определяем дату 1 год назад
    $date_old_order = date('Y-m-d H:i:s', strtotime('-1 year'));

    // Получаем неактивных пользователей (role = customer) без заказов за 6 месяцев
    $args = array(
        'role' => 'customer',
        'meta_query' => array(
            array(
                'key' => 'last_order_date',
                'value' => $date_inactive,
                'compare' => '<=',
                'type' => 'DATETIME'
            ),
        ),
        'fields' => 'ID',
        'number' => -1
    );
    $inactive_users = get_users($args);

    foreach ($inactive_users as $user_id) {
        wp_delete_user($user_id);
    }

    // Удаляем старые заказы
    $args_orders = array(
        'limit' => -1,
        'status' => array('completed', 'cancelled'),
        'date_created' => '<=' . $date_old_order
    );
    $orders = wc_get_orders($args_orders);

    foreach ($orders as $order) {
        // Проверяем возвраты и споры - если есть, не удаляем
        if (!$order->get_refunds()) {
            wp_delete_post($order->get_id(), true);
        }
    }
}

2. Добавление хука для запуска функции по расписанию

Создадим ежедневное задание для запуска этой функции с помощью WP-Cron.

function wc_schedule_inactive_cleanup() {
    if (!wp_next_scheduled('wc_cleanup_event')) {
        wp_schedule_event(time(), 'daily', 'wc_cleanup_event');
    }
}
add_action('wp', 'wc_schedule_inactive_cleanup');

add_action('wc_cleanup_event', 'wc_delete_inactive_customers_and_old_orders');

3. Обновление даты последнего заказа пользователя

Для корректной работы нужно обновлять мета-поле last_order_date при каждом заказе.

function wc_update_last_order_date($order_id) {
    $order = wc_get_order($order_id);
    $user_id = $order->get_user_id();
    if ($user_id) {
        update_user_meta($user_id, 'last_order_date', current_time('mysql'));
    }
}
add_action('woocommerce_thankyou', 'wc_update_last_order_date');

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

  • Через несколько дней проверьте список пользователей в админке: неактивные клиенты должны быть удалены.
  • Зайдите в админку WooCommerce — заказы старше года без возвратов должны быть удалены.
  • Для проверки WP-Cron используйте плагин WP Crontrol, чтобы убедиться, что событие wc_cleanup_event срабатывает ежедневно.

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

  • Ошибка: Не удаляются пользователи с заказами.
    Причина: Мета-поле last_order_date не обновляется.
    Решение: Проверьте, что хук woocommerce_thankyou подключен и функция обновления мета-поля работает корректно.
  • Ошибка: WP-Cron не срабатывает.
    Причина: На сервере отключен WP-Cron или нет посещений сайта.
    Решение: Настройте системный cron на вызов wp-cron.php или используйте плагин для мониторинга.
  • Ошибка: Удаляются нужные заказы.
    Причина: Не проверяются возвраты и споры.
    Решение: Добавьте дополнительные проверки в функцию удаления заказов.

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

  • Перед удалением пользователей и заказов сделайте резервную копию базы данных.
  • Запускайте скрипт удаления в нерабочее время, чтобы минимизировать нагрузку.
  • Для больших магазинов разбивайте удаление на партии (например, по 100 пользователей за раз).
  • Используйте WP-Cron с системным cron, чтобы избежать сбоев.

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

МетодОписаниеПреимуществаНедостатки
Ручное удаление через админкуУдаление пользователей и заказов вручнуюПолный контроль, нет кодаТрудоемко, не подходит для большого объема
Плагины очисткиИспользование плагинов для удаления неактивных клиентовПростота, автоматизацияМогут конфликтовать, ограниченные настройки
Кастомный код + WP-Cron (как в статье)Автоматическое удаление по расписанию с кастомными условиямиГибкость, контроль, масштабируемостьТребует навыков разработки, риски при ошибках
×
-15%
на премиум плагин
My Popup

Повысьте конверсию!

Получить скидку »