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

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

WooCommerce предоставляет множество хуков для расширения функционала интернет-магазина. Один из самых полезных — woocommerce_order_status_changed. Он срабатывает, когда статус заказа меняется, например, с "обработка" на "выполнен" или "отменён". Использование этого хука позволяет автоматизировать задачи, связанные с изменением статуса заказа: отправку нестандартных уведомлений, обновление данных, интеграции с внешними сервисами и прочее.

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

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

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

Пошаговое решение: пример использования хука 'woocommerce_order_status_changed'

Допустим, вы хотите отправлять письмо администратору при смене статуса заказа на "выполнен" и логировать это событие в отдельный файл.

Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:

add_action('woocommerce_order_status_changed', 'custom_order_status_changed_action', 10, 4);
function custom_order_status_changed_action($order_id, $old_status, $new_status, $order) {
    if ($new_status === 'completed') {
        // Отправляем письмо админу
        $to = get_option('admin_email');
        $subject = "Заказ #" . $order_id . " выполнен";
        $message = "Заказ с ID " . $order_id . " сменил статус на выполнен.";
        wp_mail($to, $subject, $message);

        // Логируем событие
        $log_entry = date('Y-m-d H:i:s') . " - Заказ #$order_id сменил статус с $old_status на $new_status\n";
        file_put_contents(WP_CONTENT_DIR . '/order-status.log', $log_entry, FILE_APPEND | LOCK_EX);
    }
}

Объяснение кода

  • Первым параметром хука идут идентификатор заказа, старый и новый статус, а также объект заказа.
  • В условии $new_status === 'completed' мы проверяем, что новый статус — "выполнен".
  • Отправляем email администратору.
  • Записываем событие в лог-файл wp-content/order-status.log.

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

Чтобы убедиться, что всё работает как надо:

  1. Создайте тестовый заказ в WooCommerce.
  2. Измените его статус на "выполнен" через админ-панель.
  3. Проверьте почту администратора — письмо должно прийти.
  4. Откройте файл wp-content/order-status.log — там должна появиться новая запись о смене статуса.

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

  • Ошибка: Письмо не отправляется.
    Причина: Неправильно настроен SMTP или wp_mail не работает.
    Решение: Проверьте настройки почты, используйте SMTP-плагин (например, WP Mail SMTP) для отладки.
  • Ошибка: Лог-файл не создаётся или не записывается.
    Причина: Отсутствуют права на запись в папку wp-content.
    Решение: Проверьте права на папку, выставьте 755 или 775 для каталога, 644 для файла.
  • Ошибка: Хук не срабатывает.
    Причина: Код добавлен в неподходящее место или ошибка PHP блокирует выполнение.
    Решение: Включите отладку PHP, проверьте логи, убедитесь, что код выполняется.

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

  • Не записывайте логи в публично доступные каталоги без защиты — создайте файл .htaccess с запретом доступа или храните логи за пределами публичной папки.
  • Для сложных операций при смене статуса используйте очереди задач (wp_cron или сторонние сервисы), чтобы не блокировать основной поток.
  • Проверяйте, что объект заказа $order передан корректно, чтобы избежать ошибок при вызове методов.

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

СпособПлюсыМинусыКомпромисс
Код в functions.phpЛегко внедрить, быстроТрудно масштабировать, может потеряться при смене темыИспользовать дочернюю тему
Создание собственного плагинаКонтролируемо, безопасно, переносимоТребует знаний плагин-разработкиИспользовать шаблон плагина
Плагины автоматизации (типа AutomateWoo)Мощный функционал без кодаПлатные, могут быть избыточнымиИспользовать для сложных сценариев
Как изменить структуру ссылок в WordPress без плагинов
03.03.2026
Как создать и использовать автоматические корректоры грамматики в WordPress
29.03.2026
Как создать собственный виджет WordPress: пошаговое руководство с примерами кода
17.11.2025
Как удалить неиспользуемые таксономии в WordPress
03.01.2026
Как создать динамические таблицы в WordPress с помощью шорткода
15.03.2026

Хотите научиться создавать сайты и зарабатывать на этом от 30 000 рублей в месяц?

Записаться на курс сейчас