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

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

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

Чтобы убедиться, что у вас есть отменённые заказы, выполните SQL-запрос в базе данных или используйте WP-CLI:

wp post list --post_type=shop_order --post_status=wc-cancelled --fields=ID,post_date

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

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

1. Создание функции удаления отменённых заказов

Добавьте следующий код в файл functions.php вашей дочерней темы или в отдельный плагин:

function wpc_delete_cancelled_orders() {
    $args = array(
        'post_type'      => 'shop_order',
        'post_status'    => 'wc-cancelled',
        'posts_per_page' => -1,
        'fields'         => 'ids',
    );

    $orders = get_posts($args);
    if (!empty($orders)) {
        foreach ($orders as $order_id) {
            wp_delete_post($order_id, true); // true - без возможности восстановления
        }
    }
}

2. Автоматизация через WP-Cron

Чтобы функция запускалась регулярно, зарегистрируйте событие WP-Cron:

if (!wp_next_scheduled('wpc_delete_cancelled_orders_hook')) {
    wp_schedule_event(time(), 'daily', 'wpc_delete_cancelled_orders_hook');
}
add_action('wpc_delete_cancelled_orders_hook', 'wpc_delete_cancelled_orders');

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

3. Дополнительно: удаление связанных товаров из заказов

В WooCommerce товары не удаляются из базы при удалении заказа, т.к. они — это записи CPT product. Обычно товары не удаляются. Если нужно удалить только метаданные или данные по заказу, это делается автоматически при удалении заказа. Если же у вас кастомные данные, придется уточнить задачу.

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

  • Перейдите в админку WooCommerce в раздел Заказы и фильтруйте по статусу Отменён. Заказы должны отсутствовать или уменьшиться в количестве.
  • Запустите вручную функцию, добавив временно вызов wpc_delete_cancelled_orders(); и проверьте, что отменённые заказы удаляются.
  • Проверьте базу данных, выполнив запрос на поиск заказов с отменённым статусом (см. раздел диагностики).

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

  • Удаление заказов не происходит: убедитесь, что событие WP-Cron запущено. Иногда WP-Cron не запускается из-за низкой посещаемости сайта. Для проверки используйте плагин WP Crontrol.
  • Удаляются не только отменённые заказы: проверьте параметры в get_posts, чтобы статус был строго wc-cancelled.
  • Удаление заказов вызывает ошибки: проверьте, нет ли конфликтов с другими плагинами или темой, отключите их поочерёдно.

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

  • Используйте жёсткое удаление (wp_delete_post($order_id, true)) только если уверены, что резервные копии есть.
  • Запускайте удаление в ночное время, чтобы не влиять на работу сайта.
  • Если заказов очень много, разбивайте удаление на партии (например, по 50 заказов за раз) с использованием offset и paged в запросах.
  • Для больших магазинов лучше выполнять удаление через WP-CLI, чтобы избежать таймаутов PHP.

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

МетодПлюсыМинусыРекомендации
Удаление вручную через админкуПростота, нет кодаТрудозатратно, риск пропуска заказовПодходит для малого количества заказов
Код с WP-Cron (описанный выше)Автоматизация, подходит для средних магазиновЗависит от работы WP-Cron, возможны таймаутыРекомендуется для сайтов с умеренным трафиком
Удаление через WP-CLIБыстро, надежно, не зависит от WP-CronТребует доступа к серверу и навыков CLIОптимально для больших магазинов и частых очисток
WooCommerce: как автоматически удалять отменённые заказы и товары из них
28.04.2026
WooCommerce: как автоматически удалять отменённые заказы
21.05.2026
Как удалить постоянные редиректы в WordPress: практическое руководство
26.03.2026
WordPress: автоматический экспорт данных в Excel
18.11.2025
Как изменить размер и оптимизировать изображения в WordPress без плагинов
05.01.2026

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