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

Что такое метаданные заказа в WooCommerce и зачем их обновлять

Метаданные заказа — это дополнительные данные, которые не входят в стандартные поля заказа WooCommerce, но важны для бизнес-логики. Например, это могут быть внутренние комментарии, сведения о маркетинговой кампании, дополнительные параметры доставки или кастомные поля, которые вы хотите сохранить вместе с заказом.

Обновление метаданных при оформлении заказа позволяет динамически добавлять или изменять эти данные на лету, основываясь на информации из формы или внешних условий.

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

  • Вы используете неправильный хук, который вызывается слишком рано или слишком поздно.
  • Неверно передаете ID заказа в функцию обновления метаданных.
  • Данные не проходят валидацию, поэтому не сохраняются.
  • Метаданные перезаписываются другими плагинами или кодом.

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

Хук woocommerce_checkout_update_order_meta вызывается после того, как заказ создан, и позволяет добавить или изменить метаданные. Вот пример, как добавить пользовательское поле "Источник маркетинга" из checkout формы в метаданные заказа.

add_action('woocommerce_checkout_update_order_meta', 'add_marketing_source_to_order_meta');
function add_marketing_source_to_order_meta($order_id) {
    if (isset($_POST['marketing_source']) && !empty($_POST['marketing_source'])) {
        $marketing_source = sanitize_text_field($_POST['marketing_source']);
        update_post_meta($order_id, '_marketing_source', $marketing_source);
    }
}

Для начала необходимо добавить поле в форму оформления заказа. Добавим его с помощью хука woocommerce_after_order_notes:

add_action('woocommerce_after_order_notes', 'add_marketing_source_checkout_field');
function add_marketing_source_checkout_field($checkout) {
    woocommerce_form_field('marketing_source', array(
        'type'          => 'text',
        'class'         => array('marketing-source form-row-wide'),
        'label'         => __('Источник маркетинга'),
        'placeholder'   => __('Откуда вы узнали о нас?'),
        'required'      => false,
    ), $checkout->get_value('marketing_source'));
}

Как проверить, что метаданные успешно обновились

  • После оформления тестового заказа зайдите в админку WooCommerce > Заказы.
  • Откройте заказ и в разделе "Дополнительные поля" (Custom Fields) проверьте наличие ключа _marketing_source с введенным значением.
  • Если вы хотите вывести значение на странице заказа, используйте следующий код в шаблоне:
$order = wc_get_order($order_id);
$marketing_source = $order->get_meta('_marketing_source');
echo 'Источник маркетинга: ' . esc_html($marketing_source);

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

  • Метаданные не сохраняются: Проверьте, что в форме поле имеет правильное имя и данные передаются через POST.
  • Неверный хук: Используйте именно woocommerce_checkout_update_order_meta, а не хуки, вызываемые до создания заказа.
  • Данные не проходят валидацию: Обязательно применяйте функции очистки, например sanitize_text_field, чтобы избежать ошибок.
  • Конфликты с другими плагинами: Отключите остальные плагины, чтобы проверить, не затираются ли метаданные.

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

  • Используйте функции санитизации для входящих данных, чтобы избежать XSS и SQL-инъекций.
  • Не сохраняйте избыточные данные, чтобы не увеличивать размер базы.
  • Если нужно много кастомных полей, подумайте о создании отдельной таблицы в базе для оптимизации запросов.

Сравнение вариантов реализации

ВариантПлюсыМинусы
Код на хуке woocommerce_checkout_update_order_metaЛегко кастомизировать, не требует плагиновТребует знаний PHP, нужно тестировать
Плагин кастомных полей (например, ACF)Удобный интерфейс, быстроДополнительный плагин, нагрузка
Изменение шаблонов оформления заказаМаксимальный контроль над формойСложнее в поддержке, требует PHP и WooCommerce знаний
Как создать автоматический импорт отзывов в WordPress с использованием WPRemark
26.02.2026
Как автоматизировать управление решением технических проблем на сайте WordPress
23.03.2026
Как автоматизировать удаление незавершённых заказов WooCommerce без плагинов
14.06.2026
Как отключить и удалить Gutenberg в WordPress
11.03.2026
Автоматическое удаление незавершённых заказов в WooCommerce: пошаговое руководство
17.05.2026