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

|

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

Магазины на WooCommerce часто сталкиваются с накоплением «висячих» заказов — тех, которые были созданы, но не оплачены или не завершены пользователем. Такие заказы занимают ресурсы базы данных, замедляют работу админки и усложняют отчетность. Проблема становится особенно заметной при большом потоке посетителей и заказов. Нужно выявить такие заказы и автоматизировать их удаление.

Как определить неактивные заказы?

Неактивные заказы — обычно это заказы в статусе pending (ожидает оплаты), failed (неудачная оплата) или cancelled (отменённые), которые старше определенного времени, например, 24 или 48 часов.

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

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

1. Добавление функции для удаления заказов

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

function wpreboot_delete_old_inactive_orders() {
    $days_old = 2; // заказы старше 2 дней
    $date_query = array(
        'before' => date('Y-m-d H:i:s', strtotime("-{$days_old} days")),
        'inclusive' => true,
    );

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

    $orders = wc_get_orders($args);

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

2. Создаем событие WP-Cron для регулярного запуска

Добавьте в functions.php или плагин:

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

add_action('wpreboot_daily_delete_inactive_orders', 'wpreboot_delete_old_inactive_orders');

Этот код запустит очистку заказов один раз в сутки. Если нужно чаще, можно использовать интервал twicedaily или задать кастомный.

3. Удаление крон-события при деактивации темы или плагина

function wpreboot_deactivate_cleanup() {
    $timestamp = wp_next_scheduled('wpreboot_daily_delete_inactive_orders');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpreboot_daily_delete_inactive_orders');
    }
}

register_deactivation_hook(__FILE__, 'wpreboot_deactivate_cleanup');

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

Для ручного запуска из консоли WP-CLI можно использовать:

wp eval 'wpreboot_delete_old_inactive_orders();'

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

1. Заказы не удаляются

2. Удаляются заказы раньше времени

3. Функция вызывает ошибки или предупреждения

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

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

СпособПлюсыМинусы
WP-Cron + wc_get_orders + wp_delete_postБезопасно, использует API WooCommerce, корректно удаляет данныеЗависит от работы WP-Cron, может нагружать сервер при большом количестве заказов
Ручное удаление в БД (SQL)Быстрое удаление большого объемаРиск потери связанных данных, требует сложных запросов, опасно для стабильности
Плагины очистки WooCommerceПростота использования, готовые решенияМожет не подходить под конкретные задачи, лишний плагин в системе
WooCommerce: как автоматически удалять товары из корзины после оплаты
20.05.2026
Как удалить пустые категории и теги в WordPress из базы данных
25.11.2025
Как использовать WP-CLI для автоматизации управления WordPress
09.03.2026
Как использовать REST API WordPress для создания приложений
12.11.2025
Как избежать ошибок 502 Bad Gateway в WordPress: практические решения
20.01.2026
×
WordPress
дай сайту суперсилу!

Скидки на топовые темы и плагины

Активировать суперсилу ⋙