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

Диагностика задачи: зачем нужна автоматизация изменения статуса заказа

В WooCommerce часто возникает необходимость автоматически менять статус заказа при определённых условиях: например, после оплаты, доставки или проверки наличия товара. Ручное изменение неудобно на больших магазинах и приводит к ошибкам. Автоматизация через хуки позволяет упростить управление заказами и повысить точность обработки.

Основные хуки для изменения статуса заказа в WooCommerce

Для управления статусом заказа WooCommerce предоставляет несколько ключевых хуков и методов. Важно понимать разницу между ними:

  • woocommerce_order_status_changed — срабатывает при изменении статуса заказа, можно использовать для запуска своих функций.
  • woocommerce_payment_complete — вызывается, когда заказ помечается как оплаченный.
  • Метод $order->update_status('статус') — программно меняет статус заказа.

Пошаговое решение: автоматическое изменение статуса заказа при определённом условии

Рассмотрим пример: автоматически менять статус заказа на «выполнен» (completed) если сумма заказа больше 10000 рублей.

Шаг 1. Подключаемся к хуку оплаты заказа

add_action('woocommerce_payment_complete', 'auto_complete_order_for_large_sum');
function auto_complete_order_for_large_sum($order_id) {
    if (!$order_id) return;
    $order = wc_get_order($order_id);
    if (!$order) return;

    // Проверяем сумму заказа
    if ($order->get_total() > 10000) {
        // Меняем статус на completed
        $order->update_status('completed', 'Автоматическое завершение заказа из-за суммы больше 10000');
    }
}

Шаг 2. Проверка корректности выполнения

Для проверки:

  • Создайте тестовый заказ с суммой свыше 10000 рублей.
  • Оплатите его (например, через режим тестирования платежного шлюза).
  • В админке WooCommerce убедитесь, что статус заказа изменился на «Выполнен».

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

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

add_action('updated_post_meta', 'change_order_status_on_meta_update', 10, 4);
function change_order_status_on_meta_update($meta_id, $post_id, $meta_key, $meta_value) {
    // Проверяем, что это заказ и нужное метаполе
    if ('_delivery_confirmed' === $meta_key) {
        $order = wc_get_order($post_id);
        if (!$order) return;

        if ($meta_value === 'yes') {
            $order->update_status('completed', 'Доставка подтверждена, заказ выполнен');
        }
    }
}

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

Для проверки работоспособности:

  1. Обновите метаполе заказа через админку или код, например, с помощью update_post_meta($order_id, '_delivery_confirmed', 'yes');.
  2. Проверьте в админке, что статус изменился на «Выполнен».
  3. Посмотрите логи WooCommerce или отладочный лог (если настроено), чтобы убедиться, что функция вызвалась.

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

  • Ошибка: Функция не вызывается после оплаты.
    Причина: Платёжный шлюз не вызывает стандартный хук woocommerce_payment_complete.
    Решение: Проверьте документацию шлюза, возможно, нужно использовать другой хук, например, woocommerce_order_status_processing.
  • Ошибка: Статус не меняется из-за недостаточных прав.
    Причина: Иногда вызываемый код работает вне контекста администратора.
    Решение: Убедитесь, что используете правильные методы API WooCommerce и что код запускается в подходящем месте.
  • Ошибка: Зацикливание при вызове update_status внутри хука woocommerce_order_status_changed.
    Решение: Используйте флаги для предотвращения рекурсии или выбирайте другие хуки.

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

  • Не изменяйте статус заказа в хуках, которые вызываются очень часто без условий, чтобы избежать нагрузки.
  • Используйте проверку наличия заказа if (!$order) return; перед работой с объектом.
  • Добавляйте логирование для ключевых действий, чтобы отлавливать проблемы.
  • Для сложных условий используйте фильтры WooCommerce и кастомные поля, чтобы не перегружать глобальные хуки.

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

МетодПлюсыМинусыКогда использовать
Хук woocommerce_payment_completeПростой, срабатывает после оплатыНе подходит для других условий, зависит от шлюзаАвтоматизация после оплаты
Хук woocommerce_order_status_changedГибкий, отслеживает любые изменения статусаРиск рекурсии при изменении статуса внутри хукаМониторинг и дополнительные действия
Обновление метаполей с хуком updated_post_metaМожно реагировать на любые изменения данныхМенее специфично, надо фильтровать по ключуИзменения статуса по кастомным условиям
WordPress: как удалить все активные сеансы пользователей
19.11.2025
Как сделать вывод постов по таксономии с мета полями в WordPress
02.03.2026
Как создать динамические формы в WordPress с помощью REST API
07.04.2026
Как использовать WPRemark для автоматического ответа на комментарии в WordPress
13.01.2026
Как установить ограничение на регистрацию по IP в WordPress
31.03.2026