Диагностика задачи: зачем обновлять метаданные заказа автоматически
В 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 или полей формы — код адаптируем соответственно.
Проверка результата после внедрения
- Оформите тестовый заказ на сайте, убедившись, что cookie
utm_sourceустановлена (например, через инструменты разработчика браузера). - В админке WooCommerce откройте созданный заказ.
- Проверьте наличие метаданных: в разделе «Произвольные поля» должно появиться
_utm_sourceс нужным значением. - Для продвинутой проверки выполните 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 для метаданных | Удобство для неразработчиков | Зависимость от плагина, нагрузка | Редактирование вручную |