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

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

В WooCommerce по умолчанию статус заказа автоматически меняется после успешной оплаты, но иногда возникает необходимость изменить этот статус на кастомный или нестандартный, например, сразу переводить заказ в статус "в обработке" или "завершён". Это особенно актуально при использовании нестандартных платёжных шлюзов или кастомных бизнес-процессов.

Проверьте, какой статус выставляется по умолчанию и как работает ваш платёжный шлюз:

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

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

Для изменения статуса заказа сразу после успешной оплаты используйте хук woocommerce_payment_complete, который вызывается после завершения оплаты. Добавьте следующий код в файл functions.php вашей активной темы или в кастомный плагин:

add_action('woocommerce_payment_complete', 'custom_change_order_status_after_payment');
function custom_change_order_status_after_payment($order_id) {
    if (!$order_id) return;

    $order = wc_get_order($order_id);
    if (!$order) return;

    // Установим нужный статус, например 'processing' или 'completed'
    $new_status = 'processing';

    // Проверяем текущий статус, чтобы избежать лишних изменений
    if ($order->get_status() !== $new_status) {
        $order->update_status($new_status, 'Статус изменен автоматически после оплаты.');
    }
}

В примере выше заказ переводится в статус processing после оплаты. Вы можете заменить processing на любой другой статус, например completed, если нужно сразу закрывать заказ.

Дополнительная проверка статуса оплаты

Если вы хотите менять статус в зависимости от метода оплаты, можно добавить проверку:

add_action('woocommerce_payment_complete', 'custom_change_order_status_based_on_payment_method');
function custom_change_order_status_based_on_payment_method($order_id) {
    $order = wc_get_order($order_id);
    if (!$order) return;

    $payment_method = $order->get_payment_method();

    if ($payment_method === 'cheque') { // пример для метода оплаты 'чек'
        $order->update_status('on-hold', 'Статус изменен для метода "Чек" после оплаты.');
    } else {
        $order->update_status('processing', 'Статус изменен автоматически после оплаты.');
    }
}

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

  • Создайте тестовый заказ и оплатите его через нужный способ оплаты.
  • Перейдите в WooCommerce > Заказы и проверьте статус заказа.
  • В админке у заказа должна появиться заметка с комментарием, добавленным функцией.
  • Если статус не изменился, проверьте логи ошибок PHP и включите WP_DEBUG для отладки.

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

  • Код не срабатывает: Проверьте, что код добавлен в правильное место и сайт не кеширует старый вариант. Отключите кэширование.
  • Статус не меняется: Убедитесь, что хук woocommerce_payment_complete действительно вызывается. Для этого можно временно добавить error_log() внутри функции.
  • Неправильный статус: Используйте только существующие статусы WooCommerce: pending, processing, on-hold, completed, cancelled, refunded, failed.
  • Конфликты с плагинами: Отключите плагины, которые также могут менять статус заказов, например, кастомные шлюзы или автоматические обработчики.

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

  • Не используйте тяжелые операции или запросы к внешним сервисам внутри хука woocommerce_payment_complete, так как это может замедлить обработку заказа.
  • Всегда проверяйте валидность объекта заказа перед изменением статуса.
  • Для сложных сценариев используйте асинхронную обработку через WP Cron или очереди задач.
  • При добавлении кастомных статусов создавайте их через register_post_status, чтобы избежать конфликтов с ядром WooCommerce.

Сравнение подходов: код vs плагины

МетодПлюсыМинусы
Код в functions.phpПолный контроль, нет лишних зависимостей, легкая кастомизацияТребует знаний PHP, риск ошибок, может сломаться при обновлениях
Плагины для автоматизации статусов (например, AutomateWoo)Простой интерфейс, много настроек, поддержка разработчиковДополнительная нагрузка, необходимость обновлений, может быть платным
WooCommerce: как изменить статус заказа сразу после оплаты
18.05.2026
Использование внутренних категорий в WordPress для эффективной организации контента
30.03.2026
Как запретить копирование текста в WordPress
26.01.2026
WooCommerce: как автоматически удалять товар из корзины после оплаты
05.05.2026
Создание собственных REST API эндпоинтов в WordPress
03.12.2025