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

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

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

Для начала проверьте настройки платежного шлюза в WooCommerce и убедитесь, что он корректно передает информацию о платеже в систему. Если вы используете нестандартные шлюзы или кастомные методы оплаты, возможна необходимость ручного обновления статуса через код.

Как проверить проблему

  • Войдите в админку WordPress → WooCommerce → Заказы.
  • Откройте недавно созданный заказ с успешной оплатой, проверьте статус.
  • Если статус не меняется автоматически, значит обновление не срабатывает.
  • Проверьте логи платежного шлюза и системные логи WooCommerce на наличие ошибок.

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

Используем хук woocommerce_payment_complete — срабатывает после успешной оплаты заказа. Добавим обработчик, который обновит статус заказа на нужный, например, "завершен" (completed).

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

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

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

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

Обработка других вариантов статусов

Если нужно обновлять статус на "обработка" (processing) или другой, замените 'completed' на нужный slug статуса.

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

  • Создайте тестовый заказ с оплатой через платежный шлюз.
  • Оплатите заказ (используйте тестовый режим, если это возможно).
  • Перейдите в админку WooCommerce → Заказы и проверьте, изменился ли статус на тот, что указан в коде.
  • Если статус обновился, значит решение работает корректно.
  • Для дополнительной проверки можно включить логирование в WooCommerce и проверить записи о смене статуса.

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

  • Хук не срабатывает: проверьте, что платеж действительно завершился и хук woocommerce_payment_complete вызывается. Для некоторых шлюзов может потребоваться другой хук.
  • Конфликты с другими плагинами: отключите все сторонние плагины, проверьте работу, затем включайте по одному для выявления конфликтов.
  • Статус не меняется из-за прав доступа: убедитесь, что пользователь или системный процесс имеет права на обновление заказа.
  • PHP ошибки: проверьте логи сервера, исправьте синтаксические ошибки в коде.

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

  • Добавляйте код в кастомный плагин, чтобы не потерять после обновления темы.
  • Используйте проверку существования заказа и ID, чтобы избежать ошибок.
  • Не меняйте статус на "завершен", если ваш бизнес-процесс требует промежуточных шагов (например, "обработка").
  • Логируйте изменения статуса для отладки, например, через error_log:
error_log('Order ID: ' . $order_id . ' status updated to completed');

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

МетодПлюсыМинусы
Хук woocommerce_payment_completeПростой, работает с большинством шлюзов, автоматическийНе подходит для нестандартных платежных систем
Обработка вебхуков шлюзаПолный контроль, можно обрабатывать сложные сценарииСложнее реализовать, требуется настройка вебхуков
Ручное обновление статуса администраторомПросто, не требует кодаНе автоматично, риск человеческой ошибки
Как добавить автоматический режим работы плагинов WordPress
28.01.2026
WooCommerce: как автоматически обновлять статус заказа после успешной оплаты
03.06.2026
WooCommerce: как избавиться от проблемы повторных заказов после успешной оплаты
26.04.2026
Как удалить пустые категории в WordPress
17.01.2026
Как настроить автоматический редирект в WordPress при изменении URL
18.02.2026