Как использовать хук WooCommerce для обновления метаданных заказа при оформлении

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

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

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

Выбор правильного хука WooCommerce для обновления метаданных

Для добавления или изменения метаданных в момент оформления заказа подходят хуки, которые вызываются после сохранения заказа, например:

  • woocommerce_checkout_update_order_meta — вызывается после создания заказа и позволяет добавить метаданные.
  • woocommerce_order_status_changed — срабатывает при изменении статуса заказа, полезно для обновления данных после оплаты.

В нашем случае используем woocommerce_checkout_update_order_meta, так как нам нужно сразу добавить данные после оформления.

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

Пример кода для добавления кастомного поля utm_source из сессии или cookie в метаданные заказа:

add_action('woocommerce_checkout_update_order_meta', 'wpmarketing_add_utm_source_to_order_meta');
function wpmarketing_add_utm_source_to_order_meta($order_id) {
    if (isset($_COOKIE['utm_source'])) {
        $utm_source = sanitize_text_field($_COOKIE['utm_source']);
        update_post_meta($order_id, '_utm_source', $utm_source);
    }
}

В этом примере мы берём UTM-метку из cookie и сохраняем её в метаданных с ключом _utm_source. Если данные берутся из $_SESSION или полей формы — код адаптируем соответственно.

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

  1. Оформите тестовый заказ на сайте, убедившись, что cookie utm_source установлена (например, через инструменты разработчика браузера).
  2. В админке WooCommerce откройте созданный заказ.
  3. Проверьте наличие метаданных: в разделе «Произвольные поля» должно появиться _utm_source с нужным значением.
  4. Для продвинутой проверки выполните SQL-запрос в базе: SELECT meta_value FROM wp_postmeta WHERE post_id = <order_id> AND meta_key = '_utm_source';

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

  • Метаданные не сохраняются: проверьте, что хук подключён правильно и функция вызывается. Используйте error_log для отладки.
  • Данные не корректно очищаются: всегда применяйте функции санитизации (sanitize_text_field, intval) перед сохранением.
  • Отсутствие данных в cookie или сессии: убедитесь, что данные устанавливаются корректно до оформления заказа.
  • Конфликты с плагинами кэширования: отключите кэширование на страницах оформления заказа, чтобы данные cookie передавались корректно.

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

  • Не храните в метаданных чувствительные данные без шифрования.
  • Для больших объёмов дополнительных данных используйте отдельные таблицы или внешние сервисы.
  • Минимизируйте количество вызовов update_post_meta — объединяйте данные в один вызов, если возможно.
  • Для маркетинговых данных рекомендуем использовать кеширование и асинхронную отправку в аналитику, чтобы не замедлять оформление заказа.

Сравнение способов добавления метаданных заказа

СпособПлюсыМинусыИспользование
woocommerce_checkout_update_order_metaПростой, вызывается сразу после оформленияДанные доступны только после оформленияДобавление метаданных из формы, cookie
woocommerce_order_status_changedПозволяет обновлять данные при смене статусаЗапускается позже, не подходит для первичных данныхОбновление метаданных после оплаты
Плагин с UI для метаданныхУдобство для неразработчиковЗависимость от плагина, нагрузкаРедактирование вручную
Кастомизация полей оформления заказа WooCommerce без плагинов: пошаговое руководство
17.04.2026
Как создать настройку темы WordPress своими руками
22.11.2025
Оптимизация изображений в WordPress для маркетинга: лучшие практики и примеры кода
14.12.2025
Как добавить и удалить поля в оформлении заказа WooCommerce без плагинов
31.05.2026
Как вывести данные пользователя в WordPress без плагинов
30.03.2026