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

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

Стандартная форма оформления заказа в WooCommerce включает основные поля, но часто требуется собрать дополнительную информацию от клиента — например, номер налогоплательщика, дату доставки, пожелания к заказу или индивидуальные параметры товара. Без кастомизации стандартной формы это невозможно, что ограничивает бизнес-процессы и снижает юзабилити.

Добавление дополнительных полей в форму заказа

Для расширения формы заказа используется хук woocommerce_checkout_fields. Он позволяет добавить новые поля в нужную секцию (billing, shipping, account, или custom). Рассмотрим пример добавления поля «Номер налогоплательщика» в секцию биллинга:

add_filter('woocommerce_checkout_fields', 'wpchecker_add_tax_number_field');
function wpchecker_add_tax_number_field($fields) {
    $fields['billing']['billing_tax_number'] = array(
        'type'        => 'text',
        'label'       => __('Номер налогоплательщика', 'woocommerce'),
        'required'    => false,
        'class'       => array('form-row-wide'),
        'priority'    => 120,
        'clear'       => true,
    );
    return $fields;
}

Таким образом поле добавится в форму оформления заказа.

Сохранение дополнительных полей в заказе

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

add_action('woocommerce_checkout_update_order_meta', 'wpchecker_save_tax_number_field');
function wpchecker_save_tax_number_field($order_id) {
    if (!empty($_POST['billing_tax_number'])) {
        update_post_meta($order_id, '_billing_tax_number', sanitize_text_field($_POST['billing_tax_number']));
    }
}

Отображение поля в админке заказа

Чтобы видеть дополнительное поле в админке (панель редактирования заказа), используйте хук woocommerce_admin_order_data_after_billing_address:

add_action('woocommerce_admin_order_data_after_billing_address', 'wpchecker_display_tax_number_admin_order', 10, 1);
function wpchecker_display_tax_number_admin_order($order){
    $tax_number = get_post_meta($order->get_id(), '_billing_tax_number', true);
    if ($tax_number) {
        echo '<p><strong>' . __('Номер налогоплательщика:', 'woocommerce') . '</strong> ' . esc_html($tax_number) . '</p>';
    }
}

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

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

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

  • Поле не отображается на фронтенде: Проверьте, что фильтр woocommerce_checkout_fields правильно добавлен и возвращает массив полей.
  • Данные не сохраняются: Убедитесь, что в $_POST приходит нужное поле, и функция update_post_meta вызывается с корректным ключом.
  • Поле не видимо в админке: Проверьте, что используете правильный хук и получаете метаданные заказа по правильному ключу.
  • Проблемы с валидацией: Если поле обязательное, добавьте проверку через woocommerce_checkout_process для вывода ошибок.

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

  • Используйте sanitize_text_field или другие функции очистки данных перед сохранением, чтобы предотвратить XSS и инъекции.
  • Не добавляйте избыточные поля — это увеличивает время оформления заказа и может снизить конверсию.
  • Для сложных полей (например, даты, селекты) используйте типы полей WooCommerce, чтобы обеспечить корректность данных.
  • Если нужно хранить много дополнительных данных, рассмотрите сохранение в пользовательских таблицах или внешних сервисах для оптимизации БД.

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

  • Добавить поле через фильтр woocommerce_checkout_fields;
  • Сохранить данные через хук woocommerce_checkout_update_order_meta;
  • Отобразить данные в админке через хук woocommerce_admin_order_data_after_billing_address;
  • Реализовать валидацию через woocommerce_checkout_process, если поле обязательное;
  • Проверить очистку и безопасность данных перед сохранением;
  • Протестировать отображение и сохранение на тестовом заказе.

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

МетодПреимуществаНедостатки
Добавление через woocommerce_checkout_fieldsПростая и быстрая реализация, использование стандартных хуков WooCommerceОграничения по типам полей и кастомизации внешнего вида
Использование плагинов (ACF, Checkout Field Editor)Удобный интерфейс, расширенные типы полей, быстрая настройка без кодаДополнительная нагрузка на сайт, зависимость от сторонних плагинов
Кастомная разработка с использованием AJAX и кастомных таблицМаксимальная гибкость и масштабируемость, подходит для сложных сценариевВысокая сложность реализации, требует поддержки и тестирования
WooCommerce: как установить и настроить дополнительные поля для заказов
18.05.2026
Как использовать WPChecker для анализа производительности WordPress сайта
16.02.2026
Как использовать WPChecker для анализа и исправления ошибок в WordPress
03.04.2026
Как использовать WPChecker для анализа и оптимизации WordPress сайта
03.04.2026
WooCommerce: не работает оповещение о новом заказе — решение проблемы
20.04.2026