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

|

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

Хук woocommerce_order_status_changed срабатывает при изменении статуса заказа в WooCommerce. Он передает информацию о предыдущем статусе, новом статусе и объекте заказа. Это позволяет запускать кастомный код для автоматизации бизнес-процессов, например, уведомлений, синхронизации с CRM, изменения данных заказа и т.д.

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

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

Пример кода для добавления в файл functions.php вашей темы или в плагин:

add_action('woocommerce_order_status_changed', 'notify_admin_order_completed', 10, 4);
function notify_admin_order_completed($order_id, $old_status, $new_status, $order) {
    if ($new_status === 'completed') {
        $to = get_option('admin_email');
        $subject = "Заказ #{$order_id} выполнен";
        $message = "Статус заказа #{$order_id} изменился с '{$old_status}' на '{$new_status}'.\n";
        $message .= "Сумма заказа: " . wc_price($order->get_total()) . "\n";
        $message .= "Клиент: " . $order->get_billing_email() . "\n";
        wp_mail($to, $subject, $message);
    }
}

В этом примере при переходе заказа в статус completed на почту администратора отправляется письмо с краткой информацией о заказе.

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

  1. Сделайте тестовый заказ в магазине WooCommerce.
  2. В админке измените статус заказа на "выполнен".
  3. Проверьте, что письмо пришло на почту администратора (указанную в настройках WordPress).
  4. Для отладки можно добавить error_log('Статус заказа изменен'); внутри функции и проверить логи сервера.

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

Иногда необходимо сохранять дополнительную информацию о заказе при смене статуса. Например, ставить метку времени изменения:

add_action('woocommerce_order_status_changed', 'update_order_status_change_time', 20, 4);
function update_order_status_change_time($order_id, $old_status, $new_status, $order) {
    $order->update_meta_data('_status_changed_at', current_time('mysql'));
    $order->save();
}

Этот код добавляет или обновляет метаполе _status_changed_at с датой и временем последнего изменения статуса.

Чек-лист для работы с хуком 'woocommerce_order_status_changed'

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

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

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

ВариантОписаниеПлюсыМинусы
Код в functions.phpПрямое добавление обработчика в темуБыстро, не требует плагиновЗависит от темы, сложно переносить
Собственный плагинСоздание собственного плагина с обработчикомМодульность, легко обновлять и переноситьТребует базовых знаний плагинов
Плагин автоматизацииИспользование сторонних плагинов для триггеровПростота настройки, готовый функционалМожет быть избыточным, нагрузка, ограничения
Автоматическое создание менеджера проектов в WordPress: практическое руководство с кодом
26.03.2026
Как отладить проблемы со скрытым контентом в WooCommerce
18.06.2026
Как автоматизировать создание и удаление пользовательских ролей в WordPress с примерами кода
19.02.2026
Как автоматизировать управление пользователями в WordPress с помощью кода
12.02.2026
Как использовать WP-Cron для автоматического удаления старых отзывов WooCommerce
27.05.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее