Диагностика проблемы: зачем отключать автообработку заказов в WooCommerce?
По умолчанию WooCommerce автоматически меняет статус заказа при успешной оплате (например, на «Обработан» или «Выполнен»). Это удобно для большинства магазинов, но в ряде случаев необходимо вручную контролировать статусы заказов, например:
- Если требуется проверка оплаты вручную или через стороннюю систему;
- Если используются нестандартные статусы заказов;
- Для предотвращения автоматической отправки уведомлений и запусков последующих процессов;
- При интеграции с CRM или ERP, где статусы синхронизируются отдельно.
Если вы замечаете, что WooCommerce меняет статус заказа автоматически, а это приводит к ошибкам в бизнес-процессах, стоит отключить автообработку.
Как проверить текущее поведение автообработки заказов?
Создайте тестовый заказ с оплатой через любой платежный шлюз, например, «Чек» (Cash on Delivery) или «Оплата при доставке». После оплаты посмотрите в админке WooCommerce в разделе «Заказы», изменился ли статус автоматически или остался «Ожидает оплаты».
Если статус меняется на «Обработан» или «Выполнен»> без вашего участия, автообработка включена.
Пошаговое решение: отключаем автообработку заказов
1. Отключение автоматического изменения статуса заказа
Добавьте следующий код в файл functions.php вашей дочерней темы или в пользовательский плагин:
add_filter('woocommerce_payment_complete_order_status', 'disable_auto_order_status', 10, 3);
function disable_auto_order_status($status, $order_id, $order) {
// Возвращаем исходный статус - не меняем автоматически
return $order->get_status();
}Этот фильтр отменит автоматическое присвоение статуса после оплаты.
2. Отключение автообработки для конкретных платежных методов
Если нужно ограничить отключение только для некоторых методов оплаты, расширьте функцию, например:
function disable_auto_order_status($status, $order_id, $order) {
$payment_method = $order->get_payment_method();
$methods_to_disable = array('cod', 'cheque'); // ID методов оплаты
if (in_array($payment_method, $methods_to_disable)) {
return $order->get_status();
}
return $status;
}
add_filter('woocommerce_payment_complete_order_status', 'disable_auto_order_status', 10, 3);3. Настройка ручного изменения статусов
После отключения автообработки в админке WooCommerce зайдите в раздел «Заказы», выберите нужный заказ и вручную измените статус через выпадающий список «Статус заказа». Не забудьте нажать «Обновить».
Проверка результата после внедрения
- Создайте новый тестовый заказ с оплатой через метод, для которого отключена автообработка;
- Оплатите заказ (или пометьте как оплаченный в тестовом режиме);
- Проверьте, что статус заказа не изменился автоматически, остался «Ожидает оплаты» или тот, который был;
- Вручную измените статус заказа и убедитесь, что изменения сохраняются и уведомления работают корректно.
Частые ошибки и как их исправить
1. Статус меняется автоматом несмотря на код
- Проверьте, что код добавлен именно в активную тему или плагин.
- Убедитесь, что нет других плагинов, которые переопределяют статус (например, плагины для оплаты или автоматизации).
- Очистите кеш сайта и браузера после внесения изменений.
2. Уведомления о смене статуса не приходят после ручного изменения
- Проверьте настройки уведомлений в WooCommerce – возможно, они отключены.
- Проверьте, что в редактировании заказа статус меняется через стандартный функционал WooCommerce.
3. Платёжные шлюзы игнорируют отключение
- Некоторые шлюзы (например, PayPal, Stripe) сами меняют статус заказа через вебхуки. В этом случае нужно искать решение в настройках плагина шлюза или отлавливать их вебхуки.
Практические советы по безопасности и производительности
- Добавляя код, используйте дочернюю тему или отдельный плагин, чтобы не потерять изменения при обновлении.
- Тестируйте изменения только на staging-сайте или в локальной среде перед переносом на живой сайт.
- Отключение автоматической обработки может увеличить нагрузку на админов – используйте фильтры уведомлений, чтобы не пропустить новые заказы.
- Если используете интеграцию с CRM, настройте синхронизацию статусов вручную или через API.
Сравнение подходов: отключение автообработки через код и плагины
| Метод | Плюсы | Минусы | Компромисс |
|---|---|---|---|
Код (фильтр woocommerce_payment_complete_order_status) | Точный контроль, легкость поддержки, нет дополнительных плагинов | Требует навыков, возможны конфликты с другими плагинами | Используйте дочернюю тему + отладку на тестовом окружении |
| Плагины (например, Custom Order Status Manager) | Удобный интерфейс, дополнительные функции управления статусами | Может замедлять сайт, зависимости от разработчика | Выбирайте проверенные плагины с хорошими отзывами |