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

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

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

Пошаговое решение: как настроить автоматические изменения заказа через хуки WooCommerce

1. Определяем необходимые хуки

WooCommerce предоставляет несколько хуков, связанных с заказами. Основные из них:

  • woocommerce_order_status_changed — срабатывает при смене статуса заказа;
  • woocommerce_checkout_update_order_meta — для изменения метаданных заказа после оформления;
  • woocommerce_order_edit_status — при редактировании заказа в админке;
  • woocommerce_thankyou — после успешного оформления заказа.

Для автоматизации изменений лучше всего подходит woocommerce_order_status_changed, который позволяет реагировать на переход между статусами.

2. Пример добавления автоматической заметки при смене статуса заказа на "выполнен"

add_action('woocommerce_order_status_changed', 'add_note_on_completed', 10, 4);
function add_note_on_completed($order_id, $old_status, $new_status, $order) {
    if ($new_status === 'completed') {
        $order->add_order_note('Автоматическая заметка: заказ завершён и готов к отправке.');
    }
}

3. Пример изменения стоимости товара в заказе при смене статуса

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

add_action('woocommerce_order_status_changed', 'apply_discount_on_processing', 10, 4);
function apply_discount_on_processing($order_id, $old_status, $new_status, $order) {
    if ($new_status === 'processing') {
        foreach ($order->get_items() as $item_id => $item) {
            $price = $item->get_subtotal();
            $discounted_price = $price * 0.9; // скидка 10%
            $item->set_subtotal($discounted_price);
            $item->set_total($discounted_price);
            $item->save();
        }
        $order->calculate_totals(true);
    }
}

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

Чтобы убедиться, что хуки работают:

  • Создайте тестовый заказ на сайте;
  • Измените статус заказа в админке (например, на "выполнен" или "обрабатывается");
  • Проверьте, появилась ли автоматическая заметка в разделе заметок заказа;
  • Проверьте итоговую сумму заказа, если применялась корректировка цен.

Также можно добавить временный лог через error_log() или использовать плагин типа Query Monitor, чтобы отслеживать исполнение кода.

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

  • Хук не срабатывает: проверьте правильность названия хука и количество аргументов в функции. Для woocommerce_order_status_changed нужно 4 аргумента.
  • Изменения не сохраняются: при изменении позиций заказа обязательно вызывайте $item->save() и $order->calculate_totals(true) для перерасчёта стоимости.
  • Ошибка при попытке изменить заказ, который уже завершён: некоторые методы доступны только для заказов в определённых статусах. Проверяйте статус перед изменениями.
  • Конфликты с другими плагинами: отключите плагины, которые могут перезаписывать заказ, и проверьте работу хука заново.

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

  • Не выполняйте дорогостоящие операции внутри хуков — например, сетевые запросы без кеширования.
  • Используйте проверку nonce и capability, если хук будет менять данные по пользовательскому действию.
  • Для сложных изменений заказов лучше создавать отдельные сервисы или команды WP-CLI, вызываемые по крону, чтобы не тормозить оформление заказа.
  • Сохраняйте резервные копии базы перед изменениями, особенно при массовой автоматизации.

Сравнение вариантов автоматизации изменений заказов

МетодПримерПлюсыМинусы
Хуки WooCommercewoocommerce_order_status_changedПростая интеграция, мгновенный отклик на событияНе всегда подходит для сложных логик, возможны конфликты
Планировщик WP-CronОтложенные задачи для проверки и изменения заказовМожно выполнять сложную обработку вне основного потокаЗадержки в исполнении, зависимость от посещаемости сайта
Плагины автоматизацииНапример, AutomateWoo или подобныеГотовые решения с GUI, меньше кодаПлатные, могут нагружать сайт
Как использовать хуки для расширения функционала WordPress
18.12.2025
Как использовать WPRemark для автоматического сбора отзывов клиентов в WordPress
06.01.2026
Как настроить раздельный учет стоков в WooCommerce с помощью атрибутов и своих пользовательских полей
26.04.2026
Как создать динамическую галерею в WordPress с помощью шорткода
13.01.2026
Как создать собственный шорткод в WordPress
12.11.2025