Как использовать хук WooCommerce 'woocommerce_order_status_changed' для автоматизации задач

Что такое хук 'woocommerce_order_status_changed' и зачем он нужен

Хук woocommerce_order_status_changed позволяет отследить изменение статуса заказа в WooCommerce. Это событие происходит, когда заказ переходит из одного статуса в другой, например, из "в ожидании" в "выполнен". Используя этот хук, можно автоматически запускать действия: отправлять уведомления, интегрировать с CRM, обновлять данные в базе и многое другое.

Параметры хука

Хук вызывается с четырьмя параметрами:

  • $order_id (int) — ID заказа;
  • $old_status (string) — предыдущий статус;
  • $new_status (string) — новый статус;
  • $order (WC_Order) — объект заказа.

Пример статусов: 'pending', 'processing', 'completed', 'cancelled' и др.

Диагностика: как проверить, вызывается ли хук

Если автоматизация не срабатывает, первым делом проверяем, вызывается ли хук корректно.

Добавьте временный лог или отладочный вывод:

add_action('woocommerce_order_status_changed', function($order_id, $old_status, $new_status, $order) {
    error_log("Заказ #$order_id сменил статус с $old_status на $new_status");
}, 10, 4);

После смены статуса заказа проверьте файл debug.log в папке wp-content. Если сообщений нет, возможно, включена ли отладка в wp-config.php:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

Пошаговое решение: как добавить автоматическую отправку email при смене статуса на 'completed'

Задача: отправлять письмо клиенту, когда заказ становится "выполнен".

1. Добавляем обработчик в functions.php или в свой плагин

add_action('woocommerce_order_status_changed', 'send_email_on_completed', 10, 4);

function send_email_on_completed($order_id, $old_status, $new_status, $order) {
    if ($new_status === 'completed') {
        $to = $order->get_billing_email();
        $subject = 'Ваш заказ #'.$order_id.' выполнен';
        $message = 'Спасибо за покупку! Ваш заказ был успешно обработан.';
        wp_mail($to, $subject, $message);
    }
}

2. Проверяем работу

Создайте или измените заказ в админке WooCommerce, переведите его в статус "выполнен". Проверьте почту, указанную в заказе. Если письмо не приходит, проверьте логи почты и настройку SMTP, так как функция wp_mail зависит от сервера.

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

  • Смена статуса заказа на "completed" должна запускать отправку письма.
  • Проверьте логи debug.log на наличие ошибок.
  • Проверьте папку "Отправленные" на почтовом сервере или используйте SMTP плагин (например, WP Mail SMTP) для логирования.
  • Если письма не приходят, проверьте спам и настройки почтового сервера.

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

  • Хук не срабатывает: Возможно, неправильно указан приоритет или количество аргументов. Убедитесь, что указано 10, 4 при добавлении хука.
  • Письма не отправляются: Проверьте работу wp_mail отдельно, настройте SMTP. Можно использовать плагин WP Mail SMTP для диагностики.
  • Некорректные статусы: Статусы заказов должны быть именно такими, как у WooCommerce (completed, processing и т.д.). Используйте функцию wc_get_order_statuses() для проверки.
  • Отправка дублирующихся писем: Если заказ переводится обратно и снова в "completed", письмо отправится повторно. Добавьте дополнительную проверку, если нужно.

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

  • Не выполняйте тяжелые операции внутри хука, особенно запросы к внешним API. Лучше использовать отложенные задачи через WP-Cron.
  • Для отладки временно добавляйте логи, но не оставляйте их в продакшене.
  • Проверяйте права пользователя, если ваши действия затрагивают административные данные.
  • Используйте nonce и проверки безопасности, если добавляете AJAX-вызовы в связке с этим хуком.

Сравнение способов отправки уведомлений при смене статуса заказа

МетодПлюсыМинусыКогда использовать
Хук woocommerce_order_status_changed + wp_mail Простота, нативность, не нужны плагины Зависит от сервера, нет логирования Небольшие проекты, базовая автоматизация
Плагин SMTP (WP Mail SMTP) + хук Надежная отправка, логирование, поддержка SMTP Требует настройки и дополнительного плагина Проекты с критичной почтовой доставкой
Интеграция с внешними сервисами (через API) Гибкость, расширенные возможности Сложность реализации, задержки Крупные проекты, CRM, маркетинг
Как использовать метод WPONE REST API для получения данных пользователя в WordPress
22.01.2026
Как создать динамический список постов с фильтрами в WordPress
09.04.2026
WooCommerce: как изменить стоимость товара после оплаты и использовать это в учёте
15.06.2026
WooCommerce: автоматическое изменение стоимости товара после оплаты с помощью хука
31.05.2026
WooCommerce: установка и настройка дополнительного поля в форме оформления заказа
23.04.2026