WooCommerce: как автоматически менять статус заказа по событию

Диагностика задачи: зачем менять статус заказа автоматически

В стандартном WooCommerce заказ меняет статус вручную или по базовым событиям (оплата, отмена, возврат). Но часто нужно сделать более гибкие автоматические переходы, например, переводить заказ в статус "В обработке" сразу после оплаты, или автоматически закрывать заказ после отправки товара. Если вы столкнулись с необходимостью автоматизации смены статусов, это руководство поможет реализовать её через хуки и WP-Cron.

Как определить событие для автоматической смены статуса

WooCommerce генерирует множество событий – от изменения метаданных заказа до внешних триггеров (например, получение статуса от API службы доставки). Основные подходы:

  • Использовать хуки WooCommerce, связанные со статусами заказа: woocommerce_order_status_changed, woocommerce_payment_complete и т.п.
  • Добавить пользовательские действия после обновления метаданных заказа или внешних событий.
  • Запланировать периодическую проверку заказов с помощью WP-Cron.

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

Рассмотрим классический кейс: автоматически переводить заказ в статус processing сразу после оплаты, если он в статусе on-hold.

add_action('woocommerce_payment_complete', 'auto_change_order_status_after_payment');
function auto_change_order_status_after_payment($order_id) {
    if ( ! $order_id ) {
        return;
    }
    $order = wc_get_order($order_id);
    if ( $order && $order->has_status('on-hold') ) {
        $order->update_status('processing', 'Автоматическое обновление статуса после оплаты');
    }
}

Этот код добавьте в functions.php вашей темы или в кастомный плагин.

Как использовать WP-Cron для массового обновления статусов

Если нужно, чтобы заказы старше определённого срока автоматически переходили в статус completed, используйте WP-Cron:

add_action('wpdocs_custom_cron_hook', 'auto_complete_old_orders');
function auto_complete_old_orders() {
    $args = [
        'limit' => -1,
        'status' => 'processing',
        'date_modified' => '<' . (time() - 7 * DAY_IN_SECONDS),
    ];
    $orders = wc_get_orders($args);
    foreach ($orders as $order) {
        $order->update_status('completed', 'Автоматическое завершение заказа через 7 дней');
    }
}

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

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

  • Создайте тестовый заказ в статусе on-hold и проведите оплату через тестовый платёжный шлюз.
  • Проверьте, изменился ли статус заказа на processing в админке WooCommerce.
  • Для WP-Cron – в базе данных wp_options найдите запись с событием wpdocs_custom_cron_hook, убедитесь, что оно запланировано.
  • Выполните вручную функцию или дождитесь запуска cron, затем проверьте заказы старше 7 дней.

Частые ошибки и причины

  • Код не срабатывает после оплаты – проверьте, что платёжный шлюз вызывает хук woocommerce_payment_complete. Некоторые шлюзы используют другие хуки.
  • WP-Cron не запускается – убедитесь, что на сервере разрешены и работают wp-cron задачи; можно запланировать cron через системный crontab с вызовом WP-Cron.
  • Обновление статуса не происходит – проверьте права пользователя, под которым запускается код, и корректность ID заказа.
  • Массовое обновление тормозит сайт – оптимизируйте запросы, ограничьте число одновременно обновляемых заказов.

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

  • Добавляйте проверку nonce и прав пользователя, если скрипты вызываются из пользовательского интерфейса.
  • Для WP-Cron используйте ограничение выборки заказов по времени и статусу, чтобы не перегружать сервер.
  • Логируйте изменения статусов в отдельный файл или в системный лог для отладки без вмешательства пользователя.
  • Используйте транзакции базы данных, если обновляете связанные таблицы вручную.

Сравнение подходов автоматической смены статуса

МетодПлюсыМинусыПрименимость
Хук woocommerce_payment_completeМгновенная реакция, простотаЗависит от платёжного шлюзаОплата заказа
WP-Cron периодическийМассовое обновление, гибкостьЗадержка выполнения, зависит от cronАвтоматическое закрытие старых заказов
Пользовательские хукиГибкость, интеграция с внешними APIТребует дополнительной настройкиСобытия вне WooCommerce

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как отключить автоматическое обновление плагинов WordPress: практическое руководство
03.04.2026
WooCommerce: как безопасно удалить заказы по ссылке без запроса подтверждения
06.06.2026
WooCommerce: как правильно удалять товары с очисткой связанных данных
03.05.2026
Как добавить настройки в WordPress плагин: подробное руководство
10.11.2025
Автоматическое удаление проблемных изображений в WordPress: решение для оптимизации сайта
22.02.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее