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

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

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

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

wp wc order list --status=cancelled --format=count
wp wc order list --status=completed --format=count

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

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

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

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

function wp24_delete_old_orders_by_status( $status, $days = 30 ) {
    $date_threshold = date( 'Y-m-d H:i:s', strtotime( "-{$days} days" ) );

    $args = [
        'limit'        => -1,
        'status'       => $status,
        'date_created' => '<' . $date_threshold,
        'return'       => 'ids',
    ];

    $orders = wc_get_orders( $args );

    if ( empty( $orders ) ) {
        return 0;
    }

    foreach ( $orders as $order_id ) {
        wp_delete_post( $order_id, true ); // Полное удаление
    }

    return count( $orders );
}

2. Создаём крон-задачу для регулярного запуска

Добавьте регулярное задание, которое будет запускать удаление заказов старше 30 дней:

if ( ! wp_next_scheduled( 'wp24_schedule_delete_old_orders' ) ) {
    wp_schedule_event( time(), 'daily', 'wp24_schedule_delete_old_orders' );
}

add_action( 'wp24_schedule_delete_old_orders', function() {
    $deleted_cancelled = wp24_delete_old_orders_by_status( 'cancelled', 30 );
    $deleted_completed = wp24_delete_old_orders_by_status( 'completed', 30 );

    error_log( "Удалено отменённых заказов: {$deleted_cancelled}, завершённых заказов: {$deleted_completed}" );
});

3. Проверяем работу крона

Для проверки работы задачи:

  • Включите WP_DEBUG_LOG, чтобы увидеть логи удаления в wp-content/debug.log.
  • Для теста можно временно запустить действие вручную:
do_action( 'wp24_schedule_delete_old_orders' );

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

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

  • Количество заказов с нужными статусами в админке должно уменьшиться.
  • В файле debug.log появится запись об удалённых заказах.
  • Производительность работы с заказами в админке улучшится.

Для точного подсчёта используйте WP CLI:

wp wc order list --status=cancelled --format=count
wp wc order list --status=completed --format=count

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

1. Задача не запускается

Причина: WP-Cron может не запускаться автоматически, если на сайте низкий трафик.

Решение: настроить системный cron для вызова wp-cron.php. Например, добавьте в crontab:

* * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

2. Удаление не происходит

Причина: некорректный статус заказа или неправильный формат даты.

Решение: проверьте, что статусы передаются точно как cancelled и completed. Для дебага добавьте вывод количества найденных заказов перед удалением.

3. Заказы не удаляются полностью

Причина: вызов wp_delete_post с параметром false (корзина), а не полное удаление.

Решение: используйте wp_delete_post( $order_id, true ) для полного удаления.

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

  • Перед автоматическим удалением сделайте резервную копию базы данных, чтобы можно было восстановить данные.
  • Не удаляйте заказы младше 30 дней, чтобы сохранить нужные данные для отчетности и поддержки клиентов.
  • Если на сайте много заказов, лимитируйте удаление партиями, чтобы избежать перегрузки сервера. Например, по 100 заказов за раз.
  • Используйте WP-CLI для ручного массового удаления, если крон не подходит.

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

МетодПреимуществаНедостатки
Ручное удаление через админкуПростота, не требует кодаНеэффективно при большом количестве заказов
Автоматизация через WP-Cron и код (как в статье)Автоматическое, без плагинов, гибкоТребует базовых знаний PHP, настройка крона
Плагины для очистки WooCommerceУдобный интерфейс, дополнительные функцииДополнительная нагрузка, возможные конфликты
Автоматическое удаление старых ревизий в WordPress для оптимизации базы данных
17.02.2026
Автоматическое удаление отменённых и завершённых заказов в WooCommerce
14.07.2026
Как автоматически удалять пустые категории в WordPress с помощью кода
29.03.2026
Как использовать хуки WordPress для максимальной гранулярности управления функционалом
02.01.2026
Как удалить пустые варианты атрибутов WooCommerce без плагинов
30.07.2026