Диагностика проблемы: почему заказы автоматически подтверждаются
По умолчанию WooCommerce переводит заказы в статус processing сразу после успешной оплаты (для большинства платежных шлюзов). Это означает, что заказ считается подтверждённым и готовым к обработке. Однако в некоторых случаях требуется вручную проверять или подтверждать заказы — например, если оплата происходит офлайн, или нужны дополнительные проверки.
Проблема возникает, когда магазин автоматически меняет статус заказов на processing или completed, и это нежелательно — особенно при ручной обработке или нестандартных методах оплаты.
Как отключить автоматическое подтверждение заказов в WooCommerce
Использование кода для изменения поведения статусов заказов
Чтобы отключить автоматическое переключение статусов заказов, можно переопределить обработчики статусов через хуки WooCommerce. Самый простой способ — перехватить событие смены статуса и блокировать автоматическое обновление.
Например, для отмены автоматического перевода в processing сразу после оплаты:
add_action('woocommerce_thankyou', 'disable_auto_processing_status', 1, 1); function disable_auto_processing_status($order_id) { if (!$order_id) return; $order = wc_get_order($order_id); if (!$order) return; // Если статус заказа processing, вернуть обратно в pending if ($order->get_status() === 'processing') { $order->update_status('pending'); } }Этот код возвращает статус заказа в pending после его автоматического перевода в processing. Это простой способ предотвратить автоматическое подтверждение.
Более гибкий подход: отключение автообработки для конкретных способов оплаты
Если нужно отключить автообработку только для некоторых платежных методов, используем фильтр woocommerce_payment_complete_order_status:
add_filter('woocommerce_payment_complete_order_status', 'custom_payment_complete_status', 10, 3); function custom_payment_complete_status($status, $order_id, $order) { $disable_auto_confirm_methods = ['cheque', 'bacs']; // ID способов оплаты для отключения if (in_array($order->get_payment_method(), $disable_auto_confirm_methods)) { return 'pending'; // Оставляем заказ в ожидании } return $status; }В данном примере для банковского перевода и оплаты чеком заказ останется со статусом pending, требующим ручного подтверждения.
Проверка результата после внедрения
- Оформите тестовый заказ выбранным способом оплаты (например,
chequeилиbacs). - Завершите оплату (если это тестовый режим, имитируйте успешное завершение).
- Проверьте статус заказа в админке WooCommerce.
- Статус должен оставаться
pending, а не автоматически сменяться наprocessingилиcompleted.
Частые ошибки и их исправление
- Код не срабатывает для некоторых платежных методов: убедитесь, что указаны правильные ID методов оплаты (например,
cheque,bacs,codи т.п.). Проверьте в настройках WooCommerce. - Статус заказа меняется обратно после обновления страницы: возможно, другой плагин или тема вмешивается в смену статусов. Для диагностики отключите сторонние плагины и проверьте снова.
- Вы не видите изменений в статусах: очистите кеш сайта и браузера, если используете кеширующие плагины.
Практические советы по безопасности и производительности
- Добавляйте кастомный код через дочернюю тему или плагин для снижения риска потери изменений при обновлении.
- Проверяйте совместимость с платежными шлюзами — не все методы оплаты работают одинаково с кастомными статусами.
- Не используйте слишком общий код, который может блокировать автоматическую смену статусов для всех заказов, если это не требуется.
Сравнение вариантов отключения автоматического подтверждения заказов
| Метод | Преимущества | Недостатки |
|---|---|---|
Перевод статуса после оплаты через woocommerce_thankyou | Простой код, универсален | Менее гибкий, влияет на все платежи |
Использование фильтра woocommerce_payment_complete_order_status | Гибкий, позволяет задать исключения по способам оплаты | Нужно знать ID платежных методов |
| Плагины для управления статусами заказов | Графический интерфейс, расширенные настройки | Может замедлять сайт, требует обновлений |
Чек-лист для отключения автоматического подтверждения заказов в WooCommerce
- Определите, какие способы оплаты требуют ручного подтверждения.
- Добавьте кастомный код в functions.php или плагин.
- Тестируйте оформление заказа с этими способами оплаты.
- Проверьте статус заказа в админке после оплаты.
- Исправьте ошибки, если статус меняется автоматически.
- Проверьте совместимость с другими плагинами и темой.
- Обеспечьте резервное копирование перед внесением изменений.