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

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

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

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

  • Платежный шлюз не отправляет корректный webhook или callback для подтверждения оплаты.
  • В настройках WooCommerce не настроено автоматическое изменение статуса для конкретного способа оплаты.
  • Конфликты с другими плагинами или кастомным кодом, который переопределяет статусы.

Пошаговое решение: автоподтверждение заказа по хуку оплаты

Для решения задачи можно использовать хук woocommerce_payment_complete, который вызывается сразу после успешной оплаты заказа. На основании этого хука можно задать автоматическое изменение статуса и выполнение дополнительных действий.

Пример кода для автоподтверждения и смены статуса:

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

    // Пример: меняем статус на "завершен" для цифровых товаров
    $items = $order->get_items();
    $digital_only = true;
    foreach ($items as $item) {
        $product = $item->get_product();
        if (!$product->is_downloadable()) {
            $digital_only = false;
            break;
        }
    }

    if ($digital_only) {
        $order->update_status('completed', 'Автоматическое подтверждение для цифровых товаров');
    } else {
        // Для остальных - переводим в обработку
        $order->update_status('processing', 'Автоматическое обновление статуса после оплаты');
    }
}

Настройка для конкретного способа оплаты

Если нужно менять статус только для определенного платежного метода (например, "cod" или "bacs"), добавьте условие:

if ($order->get_payment_method() === 'bacs') {
    $order->update_status('completed', 'Автоподтверждение для банковского перевода');
}

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

Чтобы проверить, что автоподтверждение работает:

  1. Создайте тестовый заказ с нужным способом оплаты.
  2. Оплатите заказ (можно использовать тестовые платежи или режим песочницы).
  3. Перейдите в админку WooCommerce > Заказы и убедитесь, что статус изменился автоматически.
  4. Проверьте историю статусов в заказе - должна появиться ваша заметка из update_status.

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

  • Заказы не меняют статус: Проверьте, что платежный шлюз корректно обрабатывает оплату и вызывает хук woocommerce_payment_complete. Для некоторых шлюзов может понадобиться использовать другой хук, например, woocommerce_order_status_completed.
  • Статус меняется, но не на нужный: Убедитесь, что в update_status указан правильный статус, и он разрешен в WooCommerce.
  • Конфликты с другими плагинами: Отключите подозрительные плагины, которые могут влиять на статусы заказов, и протестируйте заново.
  • Код не выполняется: Добавьте логирование в функцию или используйте error_log для отладки.

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

  • Используйте проверку входных данных, чтобы избежать ошибок в $order_id и объекте заказа.
  • Не выполняйте тяжелые операции внутри хука, чтобы не замедлять процесс оплаты.
  • Для логирования ошибок используйте стандартный WP_DEBUG или сторонние сервисы, избегая вывода ошибок пользователям.
  • Для сложных сценариев используйте вебхуки платежных систем для точного подтверждения оплаты.

Сравнение вариантов реализации автоподтверждения

МетодПлюсыМинусыКогда использовать
Хук woocommerce_payment_completeПростота, стандартный способНе всегда вызывается для всех платежных шлюзовДля большинства платежных методов
Хук woocommerce_order_status_changedГибкость, можно отслеживать любые переходыСложнее логика обработкиДля сложных сценариев с несколькими статусами
Вебхуки платежных системТочное подтверждение оплатыТребует настройки внешних сервисовДля крупных проектов с высоким уровнем безопасности
Как сделать простой REST API для WordPress
26.11.2025
Как создать настройки плагина в WordPress: пошаговое руководство
26.12.2025
WooCommerce: как настроить отправку уведомлений в Telegram о новых заказах
15.05.2026
Как удалить слэш в контекстных связях WordPress
03.04.2026
Как отключить AJAX подгрузку в WooCommerce
15.02.2026