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

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

В стандартной установке WooCommerce статус заказа меняется вручную администратором или автоматически при смене статуса оплаты (например, от «Ожидает оплаты» к «Обработка»). Однако часто возникает задача продлить или обновить статус заказа на основе определённых условий — например, автоматически продлить статус «В ожидании оплаты» или перевести заказ в «Выполнен», если платеж прошел, но статус не обновился из-за сбоя интеграции с платежной системой.

Основные симптомы проблемы:

  • Заказы задерживаются в статусе «Ожидает оплаты» после успешного платежа.
  • Статусы не обновляются после изменения данных оплаты.
  • Ручное изменение статусов занимает много времени, особенно при большом объёме заказов.

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

Реализуем автоматическое обновление статусов заказов через WP-Cron с проверкой состояния оплаты. Пример ниже автоматически переводит заказы со статуса pending в processing через 1 час, если платеж подтверждён.

Шаг 1. Создаём функцию проверки и обновления статусов

function wptricks_auto_extend_order_status() {
    $args = array(
        'status' => 'pending',
        'limit' => -1,
        'date_created' => '<' . ( new WC_DateTime() )->modify('-1 hour')->date('Y-m-d H:i:s'),
    );
    $orders = wc_get_orders($args);
    foreach ($orders as $order) {
        // Проверяем статус оплаты
        if ($order->is_paid()) {
            $order->update_status('processing', 'Автоматическое обновление статуса после подтверждения оплаты.');
        }
    }
}

Шаг 2. Регистрируем WP-Cron задачу для периодического запуска

if (!wp_next_scheduled('wptricks_auto_extend_order_status_hook')) {
    wp_schedule_event(time(), 'hourly', 'wptricks_auto_extend_order_status_hook');
}
add_action('wptricks_auto_extend_order_status_hook', 'wptricks_auto_extend_order_status');

Шаг 3. Отключаем задачу при деактивации плагина или темы

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

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

  • Создайте тестовый заказ и установите статус pending.
  • Сделайте тестовый платеж, чтобы подтвердить оплату (например, через Sandbox платежной системы).
  • Запустите вручную CRON задачу через плагин WP Crontrol или дождитесь автоматического запуска.
  • Проверьте, что статус заказа изменился на processing.
  • Проверьте логи WooCommerce и заметки заказа — должно появиться сообщение об автоматическом обновлении.

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

  • CRON задача не запускается: убедитесь, что на сервере разрешены WP-Cron, или настройте системный cron для вызова wp-cron.php раз в 15 минут.
  • Функция is_paid() не срабатывает: проверьте, что платежная система корректно обновляет статус оплаты, или используйте альтернативные проверки, например, $order->get_payment_method() и $order->get_status().
  • Заказы не выбираются в запросе wc_get_orders: убедитесь, что параметр date_created передан правильно — при необходимости отладьте с помощью error_log(print_r($orders, true));.
  • Обновление статусов конфликтует с другими плагинами: проверьте совместимость, отключая сторонние расширения по очереди и анализируя поведение.

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

  • Ограничьте объём обрабатываемых заказов за один запуск, чтобы избежать таймаутов и перегрузки базы данных.
  • Используйте WP-Cron с интервалом не чаще одного раза в час для снижения нагрузки.
  • Логируйте изменения статусов в отдельный файл для аудита и отладки.
  • Всегда проверяйте, что платеж действительно прошёл, используя официальное API платежных систем.
  • Резервное копирование базы данных перед внедрением автоматизации — обязательный пункт.

Сравнение вариантов реализации автоматического обновления статусов

МетодПреимуществаНедостаткиКогда использовать
WP-Cron с wp_schedule_event Простая реализация, встроена в WP, не требует сторонних сервисов Зависит от посещаемости сайта, возможны задержки Подходит для сайтов со средней и высокой посещаемостью
Системный cron + wp-cli скрипты Точная периодичность, не зависит от посещаемости Требует доступа к серверу, сложнее в настройке Для крупных сайтов с высокими требованиями к надежности
Плагины автоматизации заказов Готовые решения с поддержкой разных сценариев Могут быть избыточными, влиять на производительность Если нет возможности писать код, нужен быстрый результат
WooCommerce: автоматическое возврат средств и смена статуса заказа через код
18.06.2026
WooCommerce: автоматическое изменение стоимости товаров по условиям на разных страницах
02.07.2026
Автоматизация создания и удаления записей в WordPress через CRON
22.01.2026
Как автоматически удалять старые изображения в WordPress
13.04.2026
Как создать автоматические уведомления в WordPress
29.11.2025