Автоматическое изменение статуса заказа в 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
Плагин автоматической отмены заказовПростота установки, готовый функционалМожет быть избыточным, нагрузка, зависит от разработчика
Ручное изменение статусовМаксимальная гибкостьТрудозатратно, ошибки, нет автоматизации
Как удалить записи из категории WordPress по атрибуту
12.03.2026
Как изменить URL страницы регистрации WordPress без плагинов
07.12.2025
Как изменить структуру ссылок в WordPress без плагинов
03.03.2026
Автоматическое удаление неоплаченных заказов в WooCommerce
03.06.2026
Как отключить Gutenberg и вернуть классический редактор в WordPress
26.12.2025

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

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