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

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

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

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

Проверьте в WooCommerce список заказов со статусом pending или on-hold, которые не были оплачены более суток. Если таких заказов много, это сигнал к автоматизации отмены.

Для анализа используйте SQL-запрос к базе данных:

SELECT ID, post_date, post_status FROM wp_posts WHERE post_type = 'shop_order' AND post_status IN ('wc-pending', 'wc-on-hold') ORDER BY post_date ASC;

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

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

1. Добавляем функцию отмены заказов старше заданного времени

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

function wc_auto_cancel_unpaid_orders() {
    $args = array(
        'limit'        => -1,
        'status'       => array('pending', 'on-hold'),
        'date_created' => '< ' . ( time() - DAY_IN_SECONDS ), // старше 24 часов
    );
    $orders = wc_get_orders($args);
    foreach ($orders as $order) {
        $order->update_status('cancelled', 'Автоматическая отмена неоплаченного заказа после 24 часов');
    }
}

add_action('woocommerce_scheduled_cancel_unpaid_orders', 'wc_auto_cancel_unpaid_orders');

2. Создаем Cron задачу для регулярного запуска функции

Добавьте регистрацию пользовательского события и планировщик задач:

function wc_schedule_cancel_unpaid_orders() {
    if (! wp_next_scheduled('woocommerce_scheduled_cancel_unpaid_orders')) {
        wp_schedule_event(time(), 'hourly', 'woocommerce_scheduled_cancel_unpaid_orders');
    }
}
add_action('wp', 'wc_schedule_cancel_unpaid_orders');

Этот код запускает проверку и отмену неоплаченных заказов каждый час.

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

  • Через админку WooCommerce перейдите в раздел «Заказы» и убедитесь, что заказы с неоплаченным статусом старше 24 часов теперь получают статус «Отменён».
  • Посмотрите логи ошибок сервера, чтобы исключить сбои в работе задачи.
  • Для тестирования создайте заказ со статусом pending и подождите час — он должен автоматически смениться на cancelled.

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

  • Отсутствует Cron задача: если отмена не происходит, проверьте, что wp-cron работает. Для теста вызовите вручную wp cron event run --due-now через WP-CLI.
  • Пропущен хук или конфликт с плагинами: отключите сторонние плагины, влияющие на статусы заказов, чтобы проверить конфликт.
  • Неправильный формат даты в запросе: убедитесь, что в date_created передается корректный таймштамп в формате UNIX.

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

  • Для магазинов с большим количеством заказов ограничьте выборку в функции (например, по 100 заказов за один запуск) и запускайте скрипт чаще.
  • Логируйте изменения статуса для аудита, добавив запись в файл лога или таблицу базы данных.
  • Если магазин использует сторонние платежные шлюзы с долгой задержкой подтверждения оплаты, увеличьте интервал ожидания отмены с 24 до 48 часов.

Сравнение способов автоматической отмены неоплаченных заказов

МетодПлюсыМинусыРекомендации
Плагин (например, WooCommerce Cancel Unpaid Orders)Простота установки, готовый функционалМожет нагружать сайт, лишний кодДля небольших магазинов
Код в functions.php с CronГибкость, контроль, меньшая нагрузкаТребует навыков программированияОптимальный для разработчиков
Ручное удаление заказовКонтроль на 100%Трудозатратно, ошибкиДля единичных случаев
Как разделить длинные посты на страницы в WordPress
13.03.2026
Как создать свой плагин в WordPress: практическое руководство
28.11.2025
Как создать автоматический плагин обновления данных в WordPress
15.12.2025
Автоматизация записи в лог WordPress на разных событиях: практические примеры и плагины
03.12.2025
Как сделать автоматический rollback обновлений WordPress при ошибках
11.02.2026