Как изменить статус доставки в WooCommerce через хук заказа

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

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

Проблемы обычно связаны с тем, что разработчики пытаются менять статус доставки напрямую без учета правильных хуков WooCommerce, либо используют устаревшие методы. Это приводит к тому, что заказ визуально меняет статус, но в системе доставки он остается прежним, что вызывает путаницу.

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

Чтобы корректно изменить статус доставки при изменении статуса заказа, используйте хук woocommerce_order_status_changed. Он срабатывает при любом изменении статуса и позволяет выполнить дополнительные действия.

Пример кода, который обновляет мета-данные заказа с новым статусом доставки после смены статуса заказа:

add_action('woocommerce_order_status_changed', 'update_shipping_status_on_order_change', 10, 4);
function update_shipping_status_on_order_change($order_id, $old_status, $new_status, $order) {
    // Пример логики: если заказ завершен, ставим доставке статус "Доставлено"
    if ($new_status === 'completed') {
        $order->update_meta_data('shipping_status', 'delivered');
        $order->save();
    }
    // Добавьте свои условия для других статусов
}

Если вы используете плагин или интеграцию с курьерской службой, замените логику обновления мета-данных на вызов API или другой механизм.

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

  • Перейдите в админку WooCommerce → Заказы.
  • Измените статус любого заказа на «Выполнен» или другой, который вы задали в коде.
  • Откройте заказ и проверьте, что в мета-данных (к примеру, в custom fields) появился ключ shipping_status со значением delivered.
  • Если используется интеграция, убедитесь, что статус доставки на стороне внешнего сервиса соответствует обновлению.

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

  • Хук не сработал: Проверьте, активна ли тема или плагин с вашим кодом, а также правильность имени функции и параметров.
  • Метаданные не сохраняются: Убедитесь, что вызван метод $order->save(); после обновления мета-данных.
  • Некорректный статус: Используйте только корректные статусы заказа из WooCommerce (например, processing, completed), иначе код не сработает.
  • Конфликты с плагинами доставки: Если используется сторонний плагин, проверьте его документацию по изменению статусов доставки.

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

  • Не храните чувствительные данные в мета-данных без шифрования.
  • Добавляйте проверку прав доступа, если код затрагивает пользовательские данные.
  • Избегайте тяжелых запросов или API вызовов внутри хуков, чтобы не замедлять обработку заказа.
  • Кэшируйте результаты, если получаете статус с внешних сервисов.

Альтернативные варианты реализации: сравнение подходов

ПодходПлюсыМинусы
Хук woocommerce_order_status_changed + update_meta_dataПростота, интеграция с WooCommerce, легкость поддержкиТолько локальное хранение, не синхронизируется с внешними сервисами автоматически
Вызов API службы доставки внутри хукаПолная автоматизация, актуальные данныеНужно обрабатывать ошибки, возможны задержки и сбои
Использование сторонних плагинов для отслеживания статусаГотовое решение, поддержка и обновленияЗависимость от плагина, возможные конфликты, лицензии
Как добавить логику в шаблоны WordPress через хуки: практические примеры и советы
19.01.2026
WooCommerce: как реализовать авторизацию пользователя через REST API с подтверждением
04.05.2026
Как создать динамическую фильтрацию товаров WooCommerce без плагинов
09.01.2026
Как создать собственный шорткод в WordPress
01.11.2025
WooCommerce: как правильно удалить товар с вариациями из базы данных
31.05.2026

Плагин службы технической поддержки для WordPress. Создание, просмотр и ответ на тикеты. Уведомление пользователей и другие функции.