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

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

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

Проверить наличие таких заказов просто: зайдите в админку WooCommerce — Заказы и отфильтруйте по статусу Ожидает оплаты. Если их много и они старше нескольких дней, проблему надо решать.

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

1. Создайте функцию удаления

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

function wc_delete_unpaid_orders() {
    $args = array(
        'status' => array('pending', 'failed'),
        'date_created' => '<' . ( time() - DAY_IN_SECONDS * 3 ), // старше 3 дней
        'limit' => -1,
        'return' => 'ids',
    );
    $orders = wc_get_orders($args);
    foreach ($orders as $order_id) {
        $order = wc_get_order($order_id);
        if ($order) {
            $order->delete(true); // true - принудительное удаление
        }
    }
}

2. Запустите функцию по расписанию с WP-Cron

Добавьте в functions.php следующий код для регистрации события и запуска раз в сутки:

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

add_action('wc_delete_unpaid_orders_daily', 'wc_delete_unpaid_orders');

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

  • После добавления кода подождите 24 часа (или вызовите вручную wc_delete_unpaid_orders() из консоли WP-CLI или временно добавьте вызов функции в init для теста).
  • Зайдите в админку WooCommerce — Заказы, отфильтруйте статусы pending и failed — заказы старше 3 дней должны быть удалены.
  • Проверьте таблицу wp_posts, где post_type = 'shop_order', чтобы убедиться, что старые заказы удалены.

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

  • Не удаляются заказы: Проверьте, что функция действительно запускается (можно добавить error_log внутри функции).
  • Заказы не старше 3 дней удаляются: Скорее всего, ошибка в вычислении времени. Используйте current_time('timestamp') вместо time() для корректного часового пояса сервера WordPress.
  • Удаляются только pending, но не failed: Проверьте, что в массиве статусов прописаны оба значения.
  • Удаление ломает отчёты или интеграции: Лучше сначала не удалять, а переводить заказы в кастомный статус и отслеживать последствия.

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

  • Перед удалением заказов сделайте резервную копию базы данных.
  • Запускать удаление раз в сутки — оптимально, чтобы не нагружать сервер.
  • Если на сайте много заказов, ограничьте выборку, например, 'limit' => 50 и запускайте WP-Cron чаще.
  • В продакшене лучше реализовать удаление через системный cron, а не WP-Cron, чтобы не зависеть от посещаемости сайта.
  • Всегда проверяйте, что удалённые заказы действительно не нужны — можно добавить резервное хранение через экспорт CSV перед удалением.

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

МетодОписаниеПлюсыМинусы
Код в functions.php + WP-CronПростая реализация через функцию и WP-CronБыстро, без плагиновWP-Cron зависит от посещаемости сайта
Плагин очистки заказовИспользование специализированных плагинов (например, WooCommerce Order Cleanup)Интерфейс, настройкиДополнительная нагрузка, зависимости
Системный cron + WP-CLIУдаление заказов через скрипт WP-CLI по системному cronНадежно, производительноТребует доступа к серверу, навыков работы с консолью
Как автоматизировать управление пользователями в WordPress: практические решения с кодом и плагинами
09.04.2026
WooCommerce: как изменить стоимость товара по дисконным кодам
16.06.2026
Автоматическое удаление не оплаченных заказов в WooCommerce по времени
26.06.2026
WooCommerce: как разрешить отслеживать отсроченные платежи и корректно обрабатывать заказы
16.07.2026
Создать динамические шорткоды в WordPress с поддержкой параметров
14.04.2026