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

Почему важно удалять неактивные заказы в WooCommerce

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

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

Прежде чем настраивать удаление заказов, нужно понять, какие заказы считать неактивными и по каким критериям. В WooCommerce статусы заказов:

  • pending — ожидает оплаты;
  • failed — оплата не прошла;
  • cancelled — отменён;
  • on-hold — удерживается (например, ожидается подтверждение);
  • processing, completed — активные и завершённые;

Для удаления обычно выбирают pending и failed, которые старше определённого количества дней.

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

1. Добавляем cron-задачу для регулярной очистки

Используем WP-Cron для автоматического запуска функции удаления заказов.

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

2. Реализация функции удаления

Удаляем заказы со статусами pending и failed, которые старше 7 дней (можно изменить период).

add_action('wc_delete_old_inactive_orders', function() {
    $days = 7; // Порог в днях
    $date = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $args = [
        'status' => ['pending', 'failed'],
        'date_created' => '<' . $date,
        'limit' => -1,
        'return' => 'ids',
    ];

    $orders = wc_get_orders($args);
    foreach ($orders as $order_id) {
        wp_delete_post($order_id, true); // Полное удаление заказа
    }
});

3. Очистка cron-задачи при деактивации

register_deactivation_hook(__FILE__, function() {
    wp_clear_scheduled_hook('wc_delete_old_inactive_orders');
});

Как проверить, что удаление работает

  • Создайте тестовый заказ со статусом pending, датируйте его старше 7 дней (через базу или вручную).
  • Запустите cron-задачу вручную, вызвав хук: do_action('wc_delete_old_inactive_orders');
  • Проверьте, что заказ удалён из админки WooCommerce.
  • Убедитесь, что заказы с другими статусами (например, processing) не удаляются.

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

Ошибка 1: Cron-задача не срабатывает

Проверьте, активен ли WP-Cron. Если сайт малопосещаемый, cron может не запускаться автоматически. Решения:

  • Настроить системный cron на хостинге для вызова wp-cron.php.
  • Запускать задачу вручную через CLI (wp cron event run wc_delete_old_inactive_orders).

Ошибка 2: Заказы не удаляются, но функция вызывается

Причина может быть в неверных параметрах wc_get_orders. Проверьте формат даты и статусы. Для отладки добавьте логирование.

Ошибка 3: Удаляются неверные заказы

Убедитесь, что фильтр по дате и статусу корректен. Ошибки в формате даты или неправильный статус приведут к удалению важной информации.

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

  • Всегда используйте полное удаление заказов (wp_delete_post($order_id, true)), чтобы убрать все связанные данные.
  • Не удаляйте заказы со статусами processing, completed, чтобы избежать потери важных данных.
  • Период удаления (7 дней) можно скорректировать под особенности вашего магазина.
  • Добавьте логирование удаления в файл для мониторинга и отката при ошибках.
  • Для сайтов с большим количеством заказов обрабатывайте удаление пакетами, чтобы не перегружать базу.

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

МетодПлюсыМинусыИспользование
Плагин (например, WP Bulk Delete)Простота, интерфейсНагрузка, ограниченная гибкостьДля новичков
Код с WP-CronГибкость, автоматизацияТребует навыков кодинга, настройка cronОпытные разработчики
Ручное удаление через админкуБезопасно, контролируемоРучной труд, не автоматичноМалое количество заказов
Как удалить или отключить отправку писем WordPress без плагинов
10.12.2025
Автопостинг из Telegram-канала в WordPress с фильтрацией и обработкой контента
17.03.2026
Автоматическое добавление новостей из RSS в WordPress без плагинов
21.02.2026
WooCommerce: как автоматически удалять нерабочие вариации товаров
05.05.2026
WooCommerce: как автоматически удалять неактивные заказы по срокам
10.07.2026