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

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

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

Для диагностики проблемы используйте следующий чек-лист:

  • Проверьте, какой статус заказа установлен по умолчанию после оформления (обычно 'pending' или 'on-hold').
  • Посмотрите лог платежного шлюза: фиксируется ли успешный платеж?
  • Проверьте, вызывается ли хук woocommerce_payment_complete после оплаты.
  • Проверьте, не блокирует ли кастомный код или другие плагины изменение статуса.

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

1. Использование хука woocommerce_payment_complete

Этот хук срабатывает, когда заказ считается оплаченным. Ваша задача — подписаться на него и изменить статус заказа на нужный. Пример кода, который ставит статус заказа в "processing" после успешной оплаты:

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

2. Обработка нестандартных платежей

Если платежный шлюз не вызывает стандартные хуки, используйте проверку статуса платежа вручную, например, через API шлюза, и обновляйте статус заказа программно. Вот пример, как вручную обновить заказ по ID:

$order = wc_get_order($order_id);
if ($order) {
    $order->payment_complete(); // автоматически ставит статус processing или completed в зависимости от настроек
}

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

Для проверки:

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

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

  • Хук не срабатывает: Убедитесь, что платежный шлюз корректно вызывает действие do_action('woocommerce_payment_complete', $order_id);. Если нет, добавьте вызов вручную в коде обработки платежа.
  • Статус не меняется из-за кеширования: Отключите кеширование заказов и страниц в плагинах кеширования или на сервере.
  • Конфликт с другими плагинами: Временно отключите плагины, влияющие на заказы, чтобы проверить, не мешают ли они изменению статуса.

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

  • Вызывайте изменение статуса только после подтверждения успешной оплаты, чтобы избежать ошибок в учете.
  • Не используйте тяжелые внешние запросы в обработчиках хуков — это может замедлить процесс оформления.
  • Логируйте изменения статусов заказов для последующего аудита и отладки.
  • Регулярно обновляйте WooCommerce и платежные шлюзы для совместимости с последними версиями PHP и WordPress.

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

МетодПреимуществаНедостатки
Код на хукахЛегковесно, гибко, нет зависимости от сторонних плагинов, полный контрольТребует навыков программирования, возможны ошибки при реализации
Плагины автоматизацииПростота установки, готовые функции, поддержкаДополнительная нагрузка, возможные конфликты, платные функции
WooCommerce: как автоматически удалять товары при изменении статуса публикации
05.07.2026
WooCommerce: как автоматически удалять неактуальные товары по дате
05.06.2026
Как автоматизировать удаление старого контента в WordPress
08.02.2026
Как добавить поддержку JSON-LD в WordPress
19.01.2026
WooCommerce: как автоматически удалять заказы по срокам и избежать дублирования
11.05.2026