WooCommerce: как автоматически отменять заказы без оплаты через 24 часа

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

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

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

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

1. Добавление пользовательского кода в functions.php или плагин сайта

Для автоматической отмены неоплаченных заказов через 24 часа используйте следующий код. Он запускается по Cron и меняет статус заказов с pending или on-hold на cancelled, если с момента создания прошло более 24 часов.

function wc_auto_cancel_unpaid_orders() {
    $args = array(
        'limit' => -1,
        'status' => array('pending', 'on-hold'),
        'date_created' => '<' . (new WC_DateTime())->modify('-1 day')->format('Y-m-d H:i:s'),
    );

    $orders = wc_get_orders($args);

    foreach ($orders as $order) {
        $order->update_status('cancelled', 'Автоматическая отмена неоплаченного заказа спустя 24 часа');
    }
}

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

add_action('wc_auto_cancel_unpaid_orders_hook', 'wc_auto_cancel_unpaid_orders');

2. Проверка работы Cron на сайте

Чтобы код сработал, необходимо, чтобы WP-Cron был активен и запускался регулярно. Для проверки можно использовать плагин WP Crontrol. Установите его и проверьте наличие задачи wc_auto_cancel_unpaid_orders_hook в списке событий. Она должна запускаться ежечасно.

Если WP-Cron отключен, настройте системный cron на сервере для вызова wp-cron.php примерно каждую минуту или 5 минут:

* * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

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

Создайте тестовый заказ с оплатой в офлайн-режиме (например, «Оплата при получении»), оставьте его неоплаченным и проверьте через час, что статус автоматически изменился на cancelled.

В админке WooCommerce в разделе «Заказы» появится комментарий к заказу с текстом отмены «Автоматическая отмена неоплаченного заказа спустя 24 часа».

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

  • WP-Cron не запускается: частая причина — отключенный WP-Cron или отсутствие реальных посещений сайта. Решение — настроить системный cron или использовать плагин WP Crontrol для диагностики.
  • Код не отменяет заказы с другим статусом: проверьте, что в 'status' переданы все нужные статусы заказа (pending, on-hold). Если у вас кастомные статусы — добавьте их в массив.
  • Отмена заказа конфликтует с другими плагинами: некоторые плагины изменяют статусы и могут блокировать автоматическое обновление. Проверьте логи и отключите конфликтующие плагины для теста.
  • Заказы не удаляются, а только отменяются: отмена не удаляет заказ из базы — это нормальное поведение WooCommerce. Для удаления нужен отдельный скрипт, но чаще достаточно статуса cancelled.

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

  • Не увеличивайте частоту запуска Cron без необходимости: запускать задачу ежечасно достаточно для большинства магазинов.
  • Кэширование и CDN могут влиять на запуск WP-Cron — убедитесь, что wp-cron.php доступен и не кэшируется.
  • Логи ошибок помогут отследить проблемы. Добавьте в wp-config.php define('WP_DEBUG_LOG', true); и смотрите /wp-content/debug.log.
  • Используйте дочернюю тему или плагин для кастомного кода, чтобы при обновлении WordPress или тем не потерять изменения.

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

МетодПлюсыМинусыРекомендации
Код в functions.php + WP-CronБесплатно, гибко, легко кастомизируетсяЗависит от работы WP-Cron, требует базовых знаний PHPЛучше для небольших и средних магазинов
Плагин автокрон или управления заказамиГотовые решения с настройками, поддержкаМожет нагружать сайт, возможны конфликты, платные версииУдобно для крупных проектов и неопытных пользователей
Серверный Cron + скриптыНадежно, не зависит от посещаемости, стабильнееТребует доступа к серверу и знаний администрированияИдеально для высоконагруженных магазинов
Как автоматизировать удалённые задачи в WordPress без использования Cron
15.03.2026
Оптимизация загрузки шаблонов WordPress для ускорения сайта
13.02.2026
Автоматическое удаление товаров WooCommerce со статусом "Черновик" старше 30 дней
11.05.2026
WooCommerce: автоматическое удаление заказов после 30 дней без оплаты
21.05.2026
WooCommerce: автоматическое отключение отправки писем по заказам без оплаты
01.05.2026