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

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

В интернет-магазинах на WooCommerce со временем накапливаются заказы со статусом cancelled, failed, refunded и даже старые pending. Это увеличивает нагрузку на базу данных, замедляет админку и усложняет аналитику. Автоматическое удаление таких заказов избавляет от ручной работы и поддерживает чистоту данных.

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

1. Выбор статусов и периода удаления

Для начала определите, какие статусы считать неактивными и с какого возраста заказы удалять. Например, удалять отмененные и неудачные заказы старше 30 дней.

2. Реализация функции удаления заказов

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

function wc_delete_old_orders() {
    $statuses_to_delete = array('cancelled', 'failed', 'refunded', 'pending');
    $days_old = 30;
    $date_query = array(
        'before' => date('Y-m-d', strtotime("-{$days_old} days")),
        'inclusive' => true,
    );

    $args = array(
        'post_type' => 'shop_order',
        'post_status' => array_map(function($s) { return 'wc-' . $s; }, $statuses_to_delete),
        'date_query' => array($date_query),
        'posts_per_page' => -1,
        'fields' => 'ids',
    );

    $query = new WP_Query($args);

    if (empty($query->posts)) {
        return;
    }

    foreach ($query->posts as $order_id) {
        wp_delete_post($order_id, true); // true чтобы удалить без корзины
    }
}

// Запускаем задачу раз в сутки
add_action('wp_loaded', function() {
    if (!wp_next_scheduled('wc_daily_delete_old_orders')) {
        wp_schedule_event(time(), 'daily', 'wc_daily_delete_old_orders');
    }
});

add_action('wc_daily_delete_old_orders', 'wc_delete_old_orders');

3. Запуск очистки через WP-Cron

Код выше запускает функцию удаления заказов автоматически раз в сутки. Чтобы проверить работу, можно вызвать wc_delete_old_orders() вручную.

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

  • В админке WooCommerce откройте заказы с указанными статусами и убедитесь, что заказы старше 30 дней отсутствуют.
  • Проверьте логи сервера на ошибки удаления.
  • Для отладки можно добавить error_log внутри цикла удаления заказов, например: error_log('Deleted order ID: ' . $order_id);

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

  • Заказы не удаляются: проверьте, что WP-Cron работает (можно использовать плагин WP Crontrol для мониторинга). Также убедитесь, что статусы указаны верно с префиксом wc-.
  • Удаляются нужные заказы: внимательно проверьте фильтр по дате и статусам, чтобы не удалить активные или важные данные.
  • Проблемы с производительностью: если заказов очень много, разбейте удаление на порции, например по 50 заказов за раз.

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

  • Перед автоматическим удалением всегда делайте резервную копию базы данных.
  • Для больших магазинов лучше запускать удаление через WP-CLI с параметрами по порциям.
  • Используйте плагин Clearfy Pro для дополнительной оптимизации и очистки WooCommerce, включая удаление дублей и оптимизацию таблиц.
  • Добавьте логирование удалений в отдельный файл для контроля.

Сравнение вариантов удаления заказов

МетодПлюсыМинусы
Ручное удаление в админкеПросто, без кодаТрудозатратно, не автоматично
Код с WP-Cron (как в статье)Автоматично, гибко, полностью под контролемЗависит от WP-Cron и правильности кода
Плагины для очистки WooCommerceУдобный интерфейс, дополнительные функцииМогут быть платными, риск конфликтов
Как автоматизировать подгон изображений в WordPress с помощью AI
27.03.2026
WooCommerce: автоматическое удаление неактивных заказов через код
21.05.2026
WooCommerce: автоматическая обработка возвратов с помощью хуков
06.05.2026
Автоматический анализ логов в WordPress: практические примеры и решения
04.01.2026
WooCommerce: автоматическое удаление неактивных заказов через код
05.06.2026