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

Проблема: накопление отменённых заказов в WooCommerce

При активной работе интернет-магазина на WooCommerce заказы со статусом «Отменено» могут накапливаться в базе данных, занимая место и замедляя админку. Это влияет на производительность сайта и создает визуальный беспорядок в списке заказов. Периодическое ручное удаление неудобно и требует времени. Автоматизация очистки таких заказов поможет поддерживать базу в порядке.

Как диагностировать наличие большого числа отменённых заказов

Проверить количество отменённых заказов можно несколькими способами:

  • В админке WooCommerce: «Заказы» → фильтр по статусу «Отменено». Если их несколько сотен — пора чистить.
  • Через SQL-запрос на базе данных WordPress:
SELECT COUNT(*) FROM wp_posts WHERE post_type = 'shop_order' AND post_status = 'wc-cancelled';

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

Пошаговое решение: автоматическое удаление заказов со статусом «Отменено» через WP Cron

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

function auto_delete_cancelled_orders() {
    $days = 30; // удалять заказы старше 30 дней
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $args = array(
        'status' => 'cancelled',
        'date_created' => '<' . $date_threshold,
        'limit' => -1,
        'return' => 'ids',
    );

    $orders = wc_get_orders( $args );

    foreach ( $orders as $order_id ) {
        wp_delete_post( $order_id, true );
    }
}

function schedule_auto_delete_cancelled_orders() {
    if ( ! wp_next_scheduled( 'auto_delete_cancelled_orders_hook' ) ) {
        wp_schedule_event( time(), 'daily', 'auto_delete_cancelled_orders_hook' );
    }
}

add_action( 'auto_delete_cancelled_orders_hook', 'auto_delete_cancelled_orders' );
add_action( 'wp', 'schedule_auto_delete_cancelled_orders' );

Объяснение кода:

  • auto_delete_cancelled_orders — функция удаляет отменённые заказы старше 30 дней.
  • schedule_auto_delete_cancelled_orders — регистрирует ежедневное событие WP Cron.
  • Удаление происходит с wp_delete_post с параметром true для полного удаления из базы.

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

  • Создайте тестовый заказ, выставьте статус «Отменено» и установите дату создания более 30 дней назад (через SQL или вручную в базе).
  • Запустите WP Cron вручную, например, через плагин WP Crontrol (https://ru.wordpress.org/plugins/wp-crontrol/) или вызовите функцию напрямую через auto_delete_cancelled_orders();.
  • Проверьте, удалился ли заказ — он должен исчезнуть из списка заказов и базы данных.
  • Также можно включить логирование в функцию, например, добавив error_log('Deleted order ID: ' . $order_id); для отладки.

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

  • Функция не запускается автоматически: убедитесь, что WP Cron работает на вашем хостинге. Для проверки используйте плагин WP Crontrol.
  • Заказы не удаляются: проверьте права пользователя (функция запускается от имени сервера), а также правильность статуса ('cancelled', а не 'wc-cancelled').
  • Удаление происходит, но заказы остаются в базе: возможно, включено «мягкое удаление» (корзина). Параметр wp_delete_post($order_id, true) обеспечивает полное удаление.
  • Ошибка в форматах даты: дата должна быть в формате 'Y-m-d H:i:s', используйте функцию date() правильно.

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

  • Удаление большого количества заказов за один раз может нагрузить сервер, ограничьте число заказов в одном запуске с помощью параметра 'limit' => 20 и запускайте функцию чаще.
  • Настройте резервное копирование перед внедрением автоматического удаления.
  • Используйте плагин Clearfy Pro для оптимизации базы и удаления мусора, если не хотите писать код вручную (Подробнее о Clearfy Pro).
  • Добавьте логирование для мониторинга успешности работы скрипта.

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

МетодПлюсыМинусыРекомендации
Ручное удаление через админкуПросто, не требует кодаТрудоёмко при большом количестве заказовПодходит для мелких магазинов
WP Cron + пользовательский кодАвтоматизация, гибкостьТребует навыков разработки, настройкаОптимально для средних и крупных магазинов
Плагины (например, Clearfy Pro)Готовое решение, дополнительные функции оптимизацииПлатные, могут содержать лишний функционалПодходит для быстрого и комплексного решения
Как добавить автоматический хлебные крошки в WordPress
07.04.2026
Как автоматически удалять неиспользуемые медиа файлы в WordPress
04.03.2026
Как автоматизировать отправку email из WordPress с помощью хуков и PHPMailer
30.03.2026
Автоматическое удаление спама в комментариях WordPress
15.12.2025
WooCommerce: как автоматически удалять отменённые заказы и товары с нулевым остатком
07.06.2026