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

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

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

Вопрос: как настроить автоматическое удаление отменённых заказов, чтобы база данных оставалась чистой, а процесс — без лишней ручной работы?

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

1. Настройка WP-Cron для периодической проверки заказов

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

function wpcource_delete_cancelled_orders() {
    $args = array(
        'status' => 'cancelled',
        'limit' => -1, // без ограничения
        'return' => 'ids',
    );
    $orders = wc_get_orders($args);
    if (!empty($orders)) {
        foreach ($orders as $order_id) {
            $order = wc_get_order($order_id);
            // Удаляем заказ навсегда
            wp_delete_post($order_id, true);
        }
    }
}

// Регистрация события в WP-Cron
function wpcource_schedule_cancelled_orders_cleanup() {
    if (!wp_next_scheduled('wpcource_daily_cancelled_orders_cleanup')) {
        wp_schedule_event(time(), 'daily', 'wpcource_daily_cancelled_orders_cleanup');
    }
}
add_action('wp', 'wpcource_schedule_cancelled_orders_cleanup');

// Хук на запуск функции
add_action('wpcource_daily_cancelled_orders_cleanup', 'wpcource_delete_cancelled_orders');

2. Альтернатива: сразу удалять заказ при смене статуса на «отменён»

Если вы хотите удалять заказ сразу после его отмены, используйте хук woocommerce_order_status_cancelled:

add_action('woocommerce_order_status_cancelled', 'wpcource_delete_order_on_cancelled', 10, 1);
function wpcource_delete_order_on_cancelled($order_id) {
    wp_delete_post($order_id, true);
}

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

  • Создайте тестовый заказ и отмените его в админке WooCommerce.
  • Проверьте, удалился ли заказ сразу (если используется второй метод) или через сутки (если используется WP-Cron).
  • Для проверки cron-задач можно использовать плагин WP Crontrol — там видно запланированные события.
  • В базе данных в таблице wp_posts проверьте, что записи с типом shop_order и статусом cancelled отсутствуют.

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

  • Удаление не происходит: Убедитесь, что WP-Cron активен. На локальных серверах cron может не работать без посещений сайта.
  • Заказы не удаляются сразу: Проверьте правильность хука, используйте woocommerce_order_status_cancelled без опечаток.
  • Удаляются не только отменённые заказы: Проверьте фильтр по статусу в запросе wc_get_orders — параметр 'status' => 'cancelled' обязателен.
  • Потеря данных: Перед массовым удалением убедитесь в наличии резервных копий базы данных.

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

  • Массовое удаление заказов может нагрузить сервер. При большом объёме данных делайте удаление партиями (например, по 100 заказов за раз) с помощью пагинации в wc_get_orders.
  • Для критичных сайтов лучше настроить системный cron вместо WP-Cron — это повысит стабильность запуска задач.
  • Всегда делайте резервную копию перед настройкой автоматического удаления.
  • Если на сайте много заказов, логируйте процесс удаления для отслеживания возможных ошибок.

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

МетодПлюсыМинусыРекомендации
Удаление по расписанию через WP-Cron Минимальное влияние на UX, можно настроить периодичность Зависимость от посещений сайта, возможна задержка удаления Для магазинов со средним и большим потоком заказов
Удаление сразу при смене статуса Мгновенное освобождение места, простая реализация Риск удаления ошибок, если заказ отменили по ошибке Для сайтов с небольшим потоком заказов, ручной проверкой заказов
Как удалить URL доменов во внутренних ссылках WordPress
12.01.2026
WooCommerce: как настроить автоматическое удаление отменённых заказов с логированием
07.06.2026
Как избежать конфликтов между плагинами в WordPress: практические советы и примеры кода
09.03.2026
WooCommerce: как автоматически удалять отменённые заказы и товары из них
11.05.2026
Как создать автоматический Sitemap в WordPress без плагинов
25.12.2025

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