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

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

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

Как понять, что эта задача актуальна для вас

  • В WooCommerce много отменённых заказов, которые не нужны для аналитики.
  • База данных WooCommerce растёт слишком быстро.
  • Вы хотите автоматически очищать систему без ручного вмешательства.

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

1. Понимание статусов заказов WooCommerce

WooCommerce использует статусы заказов, среди которых cancelled — отменённый заказ. Мы будем отслеживать переход заказа в этот статус.

2. Добавление кода в functions.php или плагин

Для удаления заказа сразу после его отмены используем хук woocommerce_order_status_cancelled. Пример кода:

add_action('woocommerce_order_status_cancelled', 'auto_delete_cancelled_order', 10, 1);
function auto_delete_cancelled_order($order_id) {
    if (!$order_id) return;
    $order = wc_get_order($order_id);
    if (!$order) return;

    // Удаляем заказ без возможности восстановления
    wp_delete_post($order_id, true);
}

Этот код удалит заказ сразу после перехода в статус "отменён". Если необходимо задержать удаление, например через 24 часа, можно использовать WP-Cron.

3. Отложенное удаление через WP-Cron

Для отложенного удаления добавляем задачу в планировщик:

add_action('woocommerce_order_status_cancelled', 'schedule_order_deletion', 10, 1);
function schedule_order_deletion($order_id) {
    if (!$order_id) return;

    // Планируем удаление через 24 часа
    wp_schedule_single_event(time() + 86400, 'delete_cancelled_order_event', array($order_id));
}

add_action('delete_cancelled_order_event', 'delete_cancelled_order');
function delete_cancelled_order($order_id) {
    $order = wc_get_order($order_id);
    if ($order && $order->get_status() === 'cancelled') {
        wp_delete_post($order_id, true);
    }
}

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

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

  1. Создайте тестовый заказ в WooCommerce.
  2. Переведите заказ в статус Отменён через админку.
  3. Обновите список заказов — удалённый заказ должен исчезнуть сразу (или через 24 часа, если настроено отложенное удаление).
  4. Можно проверить базу данных, таблицу wp_posts с типом shop_order: запись должна отсутствовать.

Частые ошибки и способы их исправления

  • Заказы не удаляются: проверьте, активен ли код и нет ли ошибок PHP. Включите логирование ошибок.
  • Удаляются не все отменённые заказы: убедитесь, что статус действительно cancelled, а не похожий (например, refunded).
  • Отложенное удаление не срабатывает: проверьте, работает ли WP-Cron на вашем сервере (например, вызовом wp cron event list через WP-CLI).
  • Удаление происходит слишком рано: используйте отложенное удаление с нужной задержкой.

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

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

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

МетодПлюсыМинусыРекомендации
Удаление сразу после отменыМоментальное очищение базыРиск удаления заказов, требующих проверкиИспользуйте, если уверены в процессе отмены
Отложенное удаление через WP-CronВозможность проверки и восстановленияЗависит от работы WP-Cron, задержка удаленияОптимально для крупных проектов
Ручное удаление через админкуПолный контрольТрудозатратно при большом количестве заказовИспользуйте для единичных случаев
Как добавить поддержку Gutenberg блоков в собственный плагин WordPress
06.03.2026
WooCommerce: как автоматически изменять стоимость товара при определённых условиях
22.05.2026
Как использовать WP Actions для автоматизации обработки заказов WooCommerce
09.07.2026
Оптимизация базы данных WordPress: удаление старых ревизий и автоматизация процесса
22.12.2025
WooCommerce: как автоматически удалять товар после продажи с подтверждением
09.07.2026