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

Диагностика проблемы с отменёнными заказами в WooCommerce

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

Проверьте, сколько заказов в статусе cancelled хранится в вашей базе данных. Для этого можно использовать SQL-запрос через phpMyAdmin или WP-CLI:

SELECT COUNT(*) FROM wp_posts WHERE post_type = 'shop_order' AND post_status = 'wc-cancelled';

Если количество отменённых заказов превышает несколько сотен, стоит автоматизировать их удаление.

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

WooCommerce не удаляет отменённые заказы автоматически, но можно добавить кастомный код в файл functions.php вашей дочерней темы или в отдельный плагин для автоматизации задачи.

1. Добавляем функцию удаления отменённых заказов старше 7 дней

function wc_auto_delete_cancelled_orders() {
    $args = [
        'status' => 'cancelled',
        'date_modified' => '<' . (time() - WEEK_IN_SECONDS),
        'limit' => -1,
        'return' => 'ids',
    ];
    $orders = wc_get_orders($args);
    foreach ($orders as $order_id) {
        wp_trash_post($order_id); // перемещаем заказ в корзину
        // или wp_delete_post($order_id, true); для полного удаления
    }
}

add_action('woocommerce_scheduled_delete_cancelled_orders', 'wc_auto_delete_cancelled_orders');

2. Планируем событие для регулярного запуска

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

Этот код запускает очистку отменённых заказов старше 7 дней ежедневно. Можно изменить интервал и срок по необходимости.

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

  • Подождите сутки после активации кода или запустите действие вручную через WP-CLI или плагин WP Crontrol.
  • Проверьте количество отменённых заказов командой SQL из раздела диагностики — оно должно уменьшиться.
  • В админке WooCommerce перейдите в «Заказы» и отфильтруйте по статусу «Отменён». Количество отменённых заказов должно уменьшиться.

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

  • Заказы не удаляются: Возможно, событие WP-Cron не запускается. Проверьте работу WP-Cron или замените на системный cron.
  • Удаляются нужные заказы: Убедитесь, что в коде фильтр по дате и статусу работает корректно. Проверьте параметры date_modified.
  • Потеря данных: Используйте wp_trash_post() вместо wp_delete_post(), чтобы иметь возможность восстановить заказы из корзины.
  • Производительность: Если заказов много, делайте удаление партиями, например, по 50 штук за один запуск, чтобы не перегружать сервер.

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

  • Добавьте проверку прав пользователя, если запускаете удаление через админку.
  • Используйте транзиенты для контроля количества удаляемых заказов за один запуск.
  • Резервное копирование базы данных перед внедрением автоматического удаления.
  • Для сайтов с большим трафиком и заказами рекомендуется запускать удаление отменённых заказов через системный cron, чтобы избежать проблем с WP-Cron.

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

МетодПлюсыМинусы
Ручное удаление через админкуПростота, контрольТрудозатратно, риск забыть
Плагин для очистки заказовУдобно, интерфейсДоп. нагрузка, риск конфликтов
Код с WP-Cron (описанный выше)Автоматизация, гибкость, контрольТребует знаний, настройка WP-Cron
Системный cron + WP-CLIНадёжно, масштабируемоСложность настройки
Удаление неиспользуемых терминов таксономий в WordPress
09.02.2026
Оценка и оптимизация загрузки скриптов в WordPress
06.04.2026
Как автоматически удалить старые версии записей в WordPress
08.01.2026
WordPress: установка и настройка WPRemark для отзывов на сайте
01.01.2026
Как избежать конфликтов между плагинами в WordPress: практические советы и примеры кода
09.03.2026

Обучение разработке на WordPress, как создавать темы, плагины. Подробнее об обучении.