Что такое хук woocommerce_order_status_processing и когда он срабатывает
Хук woocommerce_order_status_processing срабатывает в момент, когда статус заказа в WooCommerce меняется на «Обрабатывается» (processing). Этот статус обычно означает, что оплата прошла успешно, и магазин готовит заказ к отправке. Использование этого хука позволяет разработчикам запускать произвольные действия, связанные с обработкой заказа, например, отправлять кастомные уведомления, менять метаданные заказа или интегрировать внешние сервисы.
Диагностика: почему нужно использовать именно этот хук
Если у вас есть задача выполнить код после подтверждения оплаты, но до смены статуса заказа на «Выполнен» (completed), этот хук — оптимальное место. Например, для автоматической генерации трек-номера, уведомления склада или обновления CRM. Альтернативные хуки, такие как woocommerce_payment_complete или woocommerce_order_status_changed, либо срабатывают слишком рано, либо требуют дополнительной проверки статуса.
Пошаговое решение: как подключить и использовать хук
1. Откройте файл functions.php вашей дочерней темы или создайте кастомный плагин для удобства поддержки.
2. Добавьте следующий код, который выполнит нужные действия при смене статуса заказа на processing:
add_action('woocommerce_order_status_processing', 'custom_processing_order_action', 10, 1);
function custom_processing_order_action( $order_id ) {
if ( ! $order_id ) {
return;
}
$order = wc_get_order( $order_id );
// Пример: добавить заметку к заказу
$order->add_order_note('Автоматическая заметка: заказ перешел в статус Обрабатывается.');
// Пример: отправить кастомное письмо клиенту
$mailer = WC()->mailer();
$mails = $mailer->get_emails();
if ( ! empty( $mails ) ) {
$custom_email = $mails['WC_Email_Customer_Processing_Order'];
if ( $custom_email ) {
$custom_email->trigger( $order_id );
}
}
// Пример: обновить метаданные заказа
$order->update_meta_data( '_custom_processing_flag', 'yes' );
$order->save();
}3. Сохраните изменения и загрузите файл на сервер.
Как проверить, что решение сработало
Чтобы убедиться, что код работает корректно, сделайте следующее:
- Создайте тестовый заказ и оплатите его (можно использовать тестовый платеж через Sandbox).
- Проверьте в админке WooCommerce, что в заказе появилась заметка с текстом
Автоматическая заметка: заказ перешел в статус Обрабатывается.. - Убедитесь, что покупатель получил письмо с уведомлением о статусе заказа (если включено отправление почты).
- Проверьте в базе данных или через плагин для просмотра метаданных заказов, что метаданные
_custom_processing_flagустановлены в значениеyes.
Частые ошибки и как их исправить
- Хук не срабатывает: убедитесь, что платеж действительно переводит заказ в статус
processing, а не сразу вcompletedили другой статус. Некоторые платежные шлюзы могут использовать альтернативные статусы. - Функция не получает ID заказа: проверяйте, что параметр
$order_idпередается в функцию. Иногда при неправильном использовании хуков это значение может быть пустым. - Письмо не отправляется: проверьте настройки электронной почты WooCommerce, убедитесь, что сервер отправки почты корректно настроен, а также что в массиве писем действительно есть
WC_Email_Customer_Processing_Order. - Изменения не сохраняются: после обновления метаданных не забудьте вызвать
$order->save(), иначе данные не сохранятся.
Практические советы по безопасности и производительности
- Если в обработчике вы вызываете внешние API, используйте асинхронные запросы или очереди, чтобы не замедлять процесс смены статуса.
- Не храните слишком много данных в метаданных заказа, особенно если они не нужны постоянно — это замедляет загрузку заказов в админке.
- Для комплексных автоматизаций рассмотрите использование вебхуков или очередей задач (например, WP-Cron или внешние очереди), чтобы разгрузить процесс обработки заказа.
Сравнение способов автоматизации на стадии обработки заказа
| Метод | Преимущества | Недостатки | Пример |
|---|---|---|---|
Хук woocommerce_order_status_processing | Срабатывает сразу при смене статуса, прямой доступ к заказу | Блокирует процесс смены статуса, если тяжелый код | Добавление заметок, отправка писем |
Хук woocommerce_order_status_changed | Гибкий, срабатывает на любую смену статуса | Нужно проверять текущий и предыдущий статус | Условная логика для разных статусов |
| Вебхуки WooCommerce | Интеграция с внешними сервисами без нагрузки на сайт | Зависит от внешних сервисов, задержки в доставке | Отправка данных в CRM |