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

Почему важно удалять неактивные заказы в WooCommerce

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

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

Неактивные заказы — это заказы, которые находятся в статусах вроде pending, failed или cancelled и не меняют статус в течение заданного времени. В WooCommerce по умолчанию такие заказы не удаляются автоматически.

Проверьте текущие заказы в админке в разделе WooCommerce > Заказы, отфильтровав по статусам. Если видите большое количество старых pending или failed заказов, их стоит автоматически удалять.

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

1. Создайте функцию для удаления заказов старше N дней с нужными статусами

function wc_delete_old_inactive_orders() {
    $days = 7; // количество дней хранения неактивных заказов
    $statuses = array('pending', 'failed', 'cancelled');

    $date_query = array(
        'before' => date('Y-m-d H:i:s', strtotime('-' . $days . ' days')),
        'inclusive' => true,
    );

    $args = array(
        'status' => $statuses,
        'date_created' => $date_query,
        'limit' => -1,
        'return' => 'ids',
    );

    $orders = wc_get_orders($args);

    foreach ($orders as $order_id) {
        wp_delete_post($order_id, true); // принудительное удаление заказа
    }
}

2. Добавьте задачу WP-Cron для запуска функции раз в сутки

function wc_schedule_delete_inactive_orders() {
    if (! wp_next_scheduled('wc_daily_delete_inactive_orders')) {
        wp_schedule_event(time(), 'daily', 'wc_daily_delete_inactive_orders');
    }
}
add_action('wp', 'wc_schedule_delete_inactive_orders');

add_action('wc_daily_delete_inactive_orders', 'wc_delete_old_inactive_orders');

3. Для отладки можно запустить функцию вручную

// Запуск вручную (например, в functions.php или через WP-CLI)
wc_delete_old_inactive_orders();

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

  • Создайте тестовый заказ с одним из статусов (pending, failed, cancelled) и датой создания старше 7 дней (можно изменить дату вручную через базу данных).
  • Запустите функцию wc_delete_old_inactive_orders() вручную или дождитесь запуска WP-Cron (раз в сутки).
  • Проверьте, что заказ удалён из админки WooCommerce и таблицы wp_posts (тип shop_order).
  • Убедитесь, что не удалены заказы в статусах processing или completed.

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

  • Заказы не удаляются: Проверьте, что WP-Cron работает. На локальных серверах cron может не запускаться автоматически. Для теста вызовите функцию вручную.
  • Функция удаляет все заказы: Проверьте фильтр 'status' => $statuses в запросе. Убедитесь, что в массиве только нужные статусы.
  • Ошибка удаления заказа из-за зависимостей: Используйте wp_delete_post($order_id, true) с параметром true для принудительного удаления.
  • Удаление происходит слишком часто: WP-Cron запускается по расписанию. Проверьте, что событие wc_daily_delete_inactive_orders запланировано только один раз.

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

  • Перед удалением можно сделать резервную копию базы или экспорт заказов.
  • Для больших магазинов с тысячами заказов лучше разбивать удаление на части, например, по 100 заказов за раз, чтобы не превышать лимиты по времени выполнения скрипта.
  • Проверяйте логи ошибок PHP и WooCommerce, чтобы ловить сбои в работе функции.
  • Используйте плагин Clearfy Pro для дополнительной оптимизации WooCommerce и очистки базы от мусорных данных https://wpshop.ru/plugins/clearfy.

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

МетодПлюсыМинусыПодходит для
Ручное удаление через админкуПросто, без кодаТрудозатратно при большом количестве заказовМалые магазины
Автоматизация через WP-Cron и кодПолная автоматизация, гибкость настроекТребует тестирования и поддержкиСредние и крупные магазины
Плагины очистки базыУдобный интерфейс, дополнительные функцииМогут быть платными, лишний нагрузка на сайтВсе уровни, при правильном выборе
Как создать уникальный фильтр по пользователям в WordPress
26.02.2026
WooCommerce: как автоматически отключать товары после завершения продаж
19.06.2026
Как создать автоматический excerpt для курсов в WordPress
18.01.2026
Как разрешить доступ к файлам в WordPress через .htaccess: практические решения
21.11.2025
Безопасное удаление старого кода и функций из WordPress
15.02.2026