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

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

В интернет-магазинах на WooCommerce часто возникает необходимость автоматически изменять данные заказов — например, добавлять метаданные, изменять статус, корректировать цены или уведомлять сотрудников. Вручную делать это неудобно и рискованно. Для решения задачи нужны хуки WooCommerce, которые позволяют вмешиваться в процесс обработки заказов.

Обзор ключевых хуков WooCommerce для работы с заказами

WooCommerce предоставляет множество хуков, но для автоматизации изменений в заказах чаще всего используют следующие:

  • woocommerce_order_status_changed — срабатывает при изменении статуса заказа;
  • woocommerce_checkout_order_processed — вызывается после оформления заказа и его сохранения;
  • woocommerce_before_order_object_save — перед сохранением объекта заказа;
  • woocommerce_order_item_meta_updated — при обновлении метаданных позиции заказа;
  • woocommerce_payment_complete — когда заказ успешно оплачен.

Пример: Автоматическое добавление метаданных при смене статуса заказа

Допустим, нужно добавить мета-запись с датой обработки после смены статуса на "выполнен".

add_action('woocommerce_order_status_changed', 'add_processed_date_meta', 10, 4);
function add_processed_date_meta($order_id, $old_status, $new_status, $order) {
    if ($new_status === 'completed') {
        $order->update_meta_data('_date_processed', current_time('mysql'));
        $order->save();
    }
}

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

Шаг 1. Отслеживаем переход заказа в статус "в обработке"

add_action('woocommerce_order_status_changed', 'notify_customer_on_processing', 10, 4);
function notify_customer_on_processing($order_id, $old_status, $new_status, $order) {
    if ($new_status === 'processing') {
        // Отправляем кастомное письмо
        $mailer = WC()->mailer();
        $email = $mailer->emails['WC_Email_Customer_Processing_Order'];
        if ($email) {
            $email->trigger($order_id);
        }
    }
}

Шаг 2. Автоматическая корректировка цены позиции при добавлении товара в заказ

Иногда нужно менять цену товара в заказе автоматически, например, применить скидку за количество.

add_action('woocommerce_checkout_create_order_line_item', 'adjust_order_item_price', 10, 4);
function adjust_order_item_price($item, $cart_item_key, $values, $order) {
    $quantity = $item->get_quantity();
    if ($quantity > 3) {
        $regular_price = $item->get_product()->get_price();
        $discounted_price = $regular_price * 0.9; // скидка 10%
        $item->set_subtotal($discounted_price * $quantity);
        $item->set_total($discounted_price * $quantity);
    }
}

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

  • Оформите тестовый заказ с количеством товаров более 3, чтобы проверить скидку.
  • Измените статус заказа в админке на "выполнен" и проверьте, что в метаданных появился ключ _date_processed с текущей датой.
  • При смене статуса на "в обработке" убедитесь, что клиент получает письмо с уведомлением.
  • Проверьте логи сервера и WooCommerce на предмет ошибок, если автоматизация не сработала.

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

  • Не срабатывают хуки: убедитесь, что функции подключены в functions.php или плагине, и что приоритет вызова правильный (обычно 10).
  • Неверные аргументы функции: проверяйте количество и порядок аргументов, например, woocommerce_order_status_changed передает 4 параметра.
  • Объект заказа не обновляется: не забывайте вызывать $order->save() после изменения метаданных или свойств объекта.
  • Письмо не отправляется: проверьте, что в системе включена отправка писем WordPress и WooCommerce, а также что используются правильные классы email.

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

  • Избегайте тяжелых операций в хуках, особенно при массовом обновлении заказов, чтобы не создавать нагрузку на сервер.
  • Обязательно проверяйте входные данные перед изменением заказа, чтобы избежать ошибок и возможных уязвимостей.
  • Для сложных автоматизаций используйте отложенные задачи через WP-Cron или реальные cron-задачи, чтобы не блокировать пользовательский поток.
  • Включайте логирование действий в хуках для отладки и мониторинга автоматизации.

Сравнение способов автоматизации изменений заказов WooCommerce

МетодОписаниеПлюсыМинусы
Использование хуков в functions.phpДобавление кода напрямую в тему или плагинБыстро, гибко, без сторонних плагиновСложно поддерживать, может потеряться при смене темы
Создание собственного мини-плагинаВыделенный плагин для автоматизацииЧистая архитектура, проще обновлять и отключатьТребует базовых знаний разработки плагинов
Использование плагинов автоматизации (например, AutomateWoo)Готовые решения с GUIПростота настройки, множество функцийСтоимость, нагрузка, ограниченная гибкость
Как использовать REST API для создания кастомных эндпоинтов в WordPress
10.12.2025
Как удалить кеш в WordPress: практические методы и примеры кода
26.12.2025
Автоматическое изменение цены товара при обновлении в WooCommerce
22.04.2026
Как избежать проблем с нерабочими изображениями после миграции WordPress
27.05.2026
Как настроить отложенный запуск задач в WordPress без WP-Cron
12.02.2026