Как использовать хук 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.08.2026
Как отключить XML-RPC в WordPress без поломки приложения и плагинов
23.08.2026
Как закрыть дубли архивов WordPress от индексации без потери нужных страниц
20.08.2026
Как установить и настроить OmniDirect в WordPress для автоматизации рассылок
17.09.2026
Как отключить XML Sitemap для отдельных типов записей в WordPress без потери индексации нужных страниц
08.09.2026
×
-15%
на премиум-тему
Bono

Создай магазин мечты
на WordPress!

↓ ↓ ↓ ↓ ↓
Купить со скидкой »