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

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

Хук woocommerce_order_status_changed срабатывает при любом изменении статуса заказа в WooCommerce. Он принимает четыре параметра: ID заказа, старый статус, новый статус и объект заказа. С его помощью можно запускать автоматические действия, например, отправлять уведомления, изменять метаданные заказа или интегрировать с внешними сервисами.

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

Если вы уже пробовали использовать woocommerce_order_status_changed, но ничего не происходит, проверьте следующее:

  • Правильно ли указан приоритет и количество аргументов в функции add_action?
  • Подключена ли функция к хуку в правильном месте (например, в functions.php или в плагине)?
  • Нет ли ошибок PHP, которые мешают выполнению?
  • Меняется ли статус заказа действительно — например, с pending на processing?

Для отладки используйте error_log() или включите WP_DEBUG.

Пошаговое решение: пример автоматизации при смене статуса заказа

Рассмотрим простой пример — отправка дополнительного письма клиенту при переходе заказа в статус completed.

add_action('woocommerce_order_status_changed', 'wpmark_send_custom_email_on_completed', 10, 4); 
function wpmark_send_custom_email_on_completed($order_id, $old_status, $new_status, $order) {
    if ($new_status === 'completed' && $old_status !== 'completed') {
        $to = $order->get_billing_email();
        $subject = 'Спасибо за покупку!';
        $message = 'Ваш заказ #' . $order_id . ' успешно выполнен. Благодарим за выбор нашего магазина.';
        wp_mail($to, $subject, $message);
    }
}

В этом коде мы проверяем переход только в статус completed, чтобы не отправлять письмо повторно.

Автоматическое обновление мета-данных заказа

Пример: при смене статуса заказа добавляем метку с датой завершения.

add_action('woocommerce_order_status_changed', 'wpmark_update_order_meta_on_completed', 10, 4);
function wpmark_update_order_meta_on_completed($order_id, $old_status, $new_status, $order) {
    if ($new_status === 'completed') {
        update_post_meta($order_id, '_completed_date', current_time('mysql'));
    }
}

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

  • Создайте тестовый заказ в WooCommerce с любым статусом.
  • Измените статус заказа на completed через админ-панель.
  • Проверьте, пришло ли письмо на email из заказа.
  • В базе данных через phpMyAdmin или плагин типа WP phpMyAdmin проверьте наличие мета-ключа _completed_date у заказа.
  • Для отладки можно добавить запись в лог через error_log() внутри функций.

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

  • Ошибка: Функция не вызывается.
    Причина: Неправильное количество аргументов в add_action или неверный хук.
    Решение: Убедитесь, что указано 4 аргумента: add_action('woocommerce_order_status_changed', 'function_name', 10, 4);
  • Ошибка: Письмо не отправляется.
    Причина: Отказ в работе wp_mail() из-за настройки сервера.
    Решение: Настройте SMTP с помощью плагина WP Mail SMTP или аналогичного.
  • Ошибка: Дублирование действий.
    Причина: Отсутствие проверки перехода статуса.
    Решение: Проверяйте, что старый статус не равен новому перед выполнением действий.

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

  • Обрабатывайте данные аккуратно — используйте методы объекта $order для получения данных, избегайте прямого обращения к $_POST или $_GET.
  • Не нагружайте хук тяжелыми запросами или вызовами API — если нужно, используйте очередь задач через Action Scheduler или WP-Cron.
  • Для отправки писем лучше использовать SMTP, чтобы избежать попадания в спам.
  • Логируйте действия в отдельный файл, если требуется аудит изменений заказов.

Сравнение вариантов автоматизации при смене статуса заказа

ВариантПлюсыМинусыКомпромисс
Хук woocommerce_order_status_changedГибкость, можно выполнять любые действияТребует навыков PHP, возможны ошибкиИспользовать базовые проверки и логи для отладки
Плагины для автоматизации (например, AutomateWoo)Простой интерфейс, множество готовых триггеровПлатные, нагрузка на сайтИспользовать для сложных сценариев, код — для простых
Встроенные уведомления WooCommerceПростота, не требует кодаОграниченная кастомизацияДобавлять кастомные письма через код, если нужно
Как использовать хуки для автоматизации в WordPress
17.12.2025
Как решить проблему нерабочих хуков WooCommerce после обновления
31.05.2026
Как сделать отложенный запуск задач в WordPress без стандартного WP-Cron
29.12.2025
Отложенная публикация постов в WordPress: настройка и примеры
09.03.2026
Решение проблемы безопасности WordPress при использовании плагинов
06.12.2025