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

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

В WooCommerce по умолчанию заказы остаются в статусе "Ожидает оплаты" неопределённо долго, если покупатель не завершил оплату. Это создаёт нагрузку на админку и мешает аналитике. Частая задача — автоматически переводить неоплаченные заказы в статус "Отменён" через заданное время.

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

  • Проверьте, есть ли в базе неоплаченные заказы с датой создания более X дней назад.
  • Убедитесь, что нет плагинов, которые уже управляют автоматическим изменением статусов.
  • Проверьте, что не настроена автоматическая очистка неоплаченных заказов (например, через WooCommerce настройки).

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

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

function wpcourse_auto_cancel_unpaid_orders() {
    $days_limit = 3; // количество дней до отмены заказа
    $date_limit = strtotime("-" . $days_limit . " days");

    $args = array(
        'limit' => -1,
        'status' => 'pending', // статус неоплаченных заказов
        'date_created' => '<' . date('Y-m-d H:i:s', $date_limit),
    );

    $orders = wc_get_orders( $args );

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

2. Регистрируем крон-задачу

add_action('wpcourse_daily_order_check', 'wpcourse_auto_cancel_unpaid_orders');

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

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

function wpcourse_deactivate_cron() {
    $timestamp = wp_next_scheduled( 'wpcourse_daily_order_check' );
    if ( $timestamp ) {
        wp_unschedule_event( $timestamp, 'wpcourse_daily_order_check' );
    }
}
register_deactivation_hook( __FILE__, 'wpcourse_deactivate_cron' );

Как проверить, что решение работает

  • Создайте тестовый заказ со статусом "Ожидает оплаты" с датой создания более 3 дней назад. Можно вручную изменить дату заказа в базе или использовать тестовый плагин.
  • Выполните вручную крон-задачу через WP-CLI: wp cron event run wpcourse_daily_order_check
  • Проверьте, что статус заказа изменился на "Отменён" и в комментариях заказа появилась заметка об автоматической отмене.
  • Настройте логи или уведомления для контроля работы автоматизации.

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

  • Крон-задача не запускается: проверьте, что на сайте включён WP-Cron и нет проблем с его запуском. Для отладки используйте плагин WP Crontrol.
  • Функция не находит заказы: проверьте правильность параметров wc_get_orders(), особенно условие по дате. Для сложных условий можно использовать WP_Query напрямую.
  • Статус не меняется: убедитесь, что функция вызывается, и нет конфликтов с другими плагинами, блокирующими изменение статуса.

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

  • Ограничьте количество обрабатываемых заказов за один запуск, если их слишком много. Например, используйте параметр limit => 20 и в следующий запуск обрабатывайте следующие.
  • Не запускайте задачу чаще, чем раз в сутки, чтобы не перегружать базу.
  • Записывайте результаты работы в лог-файл для мониторинга и выявления сбоев.
  • Не используйте слишком короткие сроки отмены, чтобы не потерять клиентов, которые оплачивают с задержкой.

Сравнение способов автоматизации отмены заказов

МетодПлюсыМинусы
Код в functions.php + WP-CronПолный контроль, бесплатно, легко адаптироватьТребуется базовые навыки программирования, зависит от WP-Cron
Плагин автоматической отмены заказовПростота установки, готовый функционалМожет быть избыточным, нагрузка, зависит от разработчика
Ручное изменение статусовМаксимальная гибкостьТрудозатратно, ошибки, нет автоматизации
Как очистить кэш WooCommerce при изменении заказа без плагинов
09.05.2026
Как добавить временную активацию плагинов WordPress для тестирования
17.02.2026
Как создать автоматический Sitemap в WordPress с помощью кода
07.01.2026
Как удалить неиспользуемые шорткоды в WordPress
24.02.2026
Как отключить отправку email уведомлений в WordPress без плагинов
23.12.2025

Хотите научиться создавать сайты и зарабатывать на этом от 30 000 рублей в месяц?

Записаться на курс сейчас