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

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

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

Пошаговое решение: добавление и обработка пользовательских полей в WooCommerce

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

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

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

2. Валидация поля

Если поле обязательное, нужно добавить проверку в процессе оформления:

add_action('woocommerce_checkout_process', 'custom_checkout_field_process');
function custom_checkout_field_process() {
    if (!$_POST['billing_tax_number']) {
        wc_add_notice(__('Пожалуйста, введите номер налогоплательщика.'), 'error');
    }
}

3. Сохранение данных в мета-данные заказа

Чтобы сохранить введённые данные, используем хук woocommerce_checkout_update_order_meta:

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

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

Чтобы видеть данные в панели администратора WooCommerce, добавим вывод мета-поля на страницу редактирования заказа:

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

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

  • Перейдите на страницу оформления заказа.
  • Проверьте, отображается ли новое поле "Номер налогоплательщика".
  • Попробуйте оформить заказ с и без заполнения поля (если поле обязательное, должно появляться сообщение об ошибке при пустом значении).
  • В админке откройте заказ и убедитесь, что значение поля сохранено и отображается.

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

  • Поле не отображается на форме. Проверьте правильность применения фильтра woocommerce_checkout_fields и приоритет. Убедитесь, что код добавлен в functions.php вашей активной темы или в плагин.
  • Ошибка валидации не срабатывает. Убедитесь, что функция проверки подключена к хуку woocommerce_checkout_process и корректно проверяет $_POST.
  • Данные не сохраняются. Проверьте, что функция сохранения подключена к woocommerce_checkout_update_order_meta и данные правильно фильтруются через sanitize_text_field.
  • Данные не видны в админке. Убедитесь, что используете правильный хук woocommerce_admin_order_data_after_billing_address и корректно выводите мета-значение.

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

  • Обязательно фильтруйте и экранируйте данные: используйте sanitize_text_field при сохранении и esc_html при выводе.
  • Для больших форм с множеством дополнительных полей лучше использовать кастомный плагин, чтобы избежать потерь при смене темы.
  • Если необходимо собрать много данных, рассмотрите подключение плагина Advanced Custom Fields (ACF) с интеграцией в WooCommerce или специализированные плагины расширения оформления заказа.
  • Не добавляйте лишних обязательных полей — это снижает конверсию оформления заказа.

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

МетодПлюсыМинусы
Код через хуки (пример выше)Бесплатно, гибко, легко кастомизироватьТребует навыков программирования, сложнее поддерживать
Плагины расширения оформления заказа (Checkout Field Editor и др.)Простой интерфейс, быстрое добавление полей без кодаМогут влиять на производительность, ограничены функционалом
Использование ACF с интеграциейМощные возможности настройки, удобный интерфейсТребует дополнительной настройки и знаний, возможно лишнее для простых полей
Как отключить AJAX пагинацию в WordPress без плагинов
21.12.2025
Как отключить Emoji в WordPress эффективно и без плагинов
14.03.2026
Как избежать конфликтов между плагинами WordPress с примерами кода
25.01.2026
Как избежать конфликтов между кешированием и WooCommerce
09.06.2026
Как использовать хук pre_get_posts для фильтрации постов в WordPress
29.12.2025