WooCommerce: добавление собственных данных в заказ через хук woocommerce_checkout_update_order_meta

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

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

Задача: добавить произвольное поле в форму оформления, сохранить данные в метаданные заказа и отобразить их в админке WooCommerce.

Шаг 1. Добавляем поле в форму оформления заказа

Для вывода нового поля используем хук woocommerce_after_order_notes. Пример добавления текстового поля "Номер клиента":

add_action('woocommerce_after_order_notes', 'wppr_add_custom_checkout_field');
function wppr_add_custom_checkout_field($checkout) {
    echo '<div id="custom_checkout_field">';
    woocommerce_form_field('client_number', array(
        'type'          => 'text',
        'class'         => array('my-field-class form-row-wide'),
        'label'         => __('Номер клиента'),
        'placeholder'   => __('Введите номер клиента'),
        'required'      => false,
    ), $checkout->get_value('client_number'));
    echo '</div>';
}

Шаг 2. Сохраняем данные в метаданные заказа

Используем хук woocommerce_checkout_update_order_meta, который вызывается после успешного оформления заказа. Здесь нужно получить данные из $_POST и записать их в заказ:

add_action('woocommerce_checkout_update_order_meta', 'wppr_save_custom_checkout_field');
function wppr_save_custom_checkout_field($order_id) {
    if (!empty($_POST['client_number'])) {
        update_post_meta($order_id, '_client_number', sanitize_text_field($_POST['client_number']));
    }
}

Шаг 3. Отображаем данные в админке заказа WooCommerce

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

add_action('woocommerce_admin_order_data_after_billing_address', 'wppr_display_custom_field_admin_order', 10, 1);
function wppr_display_custom_field_admin_order($order){
    $client_number = get_post_meta($order->get_id(), '_client_number', true);
    if ($client_number) {
        echo '<p><strong>Номер клиента:</strong> ' . esc_html($client_number) . '</p>';
    }
}

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

  • Зайдите на страницу оформления заказа, под полем "Примечания" появится поле "Номер клиента".
  • Заполните поле и оформите заказ.
  • В админке WooCommerce откройте заказ — в блоке с данными плательщика появится сохранённое значение.

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

  • Поле не отображается в форме: проверьте, что код добавлен в functions.php активной темы или в плагин, и что функция добавлена в нужный хук.
  • Данные не сохраняются: убедитесь, что имя поля в $_POST совпадает с именем в форме, и используйте sanitize_text_field для очистки.
  • Данные не отображаются в админке: проверьте правильность ID заказа и ключа метаданных, а также используемый хук для вывода.

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

  • Всегда валидируйте и санитайзите пользовательский ввод перед сохранением — используйте sanitize_text_field, intval и т.п.
  • Для обязательных полей добавьте проверку на стороне сервера через woocommerce_checkout_process, чтобы предотвратить оформление без нужных данных.
  • Избегайте записи больших объемов данных в метаданные заказа, чтобы не замедлять загрузку страницы редактирования.

Чек-лист для добавления произвольных полей в заказ WooCommerce

  • Добавить поле в форму оформления заказа (хук woocommerce_after_order_notes)
  • Сохранить данные в метаданные заказа (хук woocommerce_checkout_update_order_meta)
  • Отобразить данные в админке заказа (хук woocommerce_admin_order_data_after_billing_address)
  • Добавить серверную валидацию (по необходимости) через woocommerce_checkout_process
  • Санитайзить данные перед сохранением

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

МетодПлюсыМинусыПример использования
Добавление поля в форму и сохранение через хукиПолный контроль, без сторонних плагиновТребует кода, больше времени на отладкуКод из статьи
Плагины для кастомизации оформления заказа (например, Checkout Field Editor)Простота, удобный UI для настроекДополнительная нагрузка, ограничения в бесплатных версияхCheckout Field Editor, Flexible Checkout Fields
Использование ACF (Advanced Custom Fields)Гибкость, множество типов полейСложнее интегрировать с оформлением заказаACF + кастомный код
Кастомизация отчетов WooCommerce с помощью хуков и фильтров
13.12.2025
Решение проблем с хостингом для WooCommerce в WordPress
08.12.2025
WooCommerce: автоматическое удаление неактивных заказов с подтверждением
07.07.2026
WooCommerce не показывает товары после обновления: как исправить
20.04.2026
Как использовать хуки в WordPress для расширения функциональности
06.11.2025