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

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

Стандартные формы регистрации и оформления заказа WooCommerce часто не покрывают всех требований бизнеса. Например, может потребоваться собрать ИНН, дату рождения, согласие на обработку данных или дополнительные контакты. Добавление полей позволяет расширить функциональность магазина без привлечения плагинов, которые могут замедлять сайт или конфликтовать с другими компонентами.

Добавление дополнительных полей в форму регистрации WooCommerce

1. Добавление поля в HTML форму регистрации

Для начала нужно вывести дополнительное поле на страницу регистрации. Вставьте следующий код в файл functions.php вашей дочерней темы или в отдельный плагин:

add_action('woocommerce_register_form_start', 'add_custom_register_field');
function add_custom_register_field() {
    ?>
    <p class="form-row form-row-wide">
        <label for="reg_inn">ИНН <span class="required">*</span></label>
        <input type="text" class="input-text" name="inn" id="reg_inn" value="<?php if (!empty($_POST['inn'])) echo esc_attr($_POST['inn']); ?>" />
    </p>
    <?php
}

2. Проверка заполнения поля

Чтобы не пропускать пустые или ошибочные значения, добавьте валидацию:

add_filter('woocommerce_registration_errors', 'validate_custom_register_field', 10, 3);
function validate_custom_register_field($errors, $username, $email) {
    if (empty($_POST['inn']) || !preg_match('/^\d{10,12}$/', $_POST['inn'])) {
        $errors->add('inn_error', __('Пожалуйста, введите корректный ИНН (10-12 цифр).', 'woocommerce'));
    }
    return $errors;
}

3. Сохранение дополнительного поля в метаданные пользователя

После успешной регистрации нужно сохранить ИНН в профиле пользователя:

add_action('woocommerce_created_customer', 'save_custom_register_field');
function save_custom_register_field($customer_id) {
    if (!empty($_POST['inn'])) {
        update_user_meta($customer_id, 'inn', sanitize_text_field($_POST['inn']));
    }
}

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

1. Вывод дополнительных полей на страницу оформления

Добавим поле "ИНН" в раздел адреса для счетов:

add_filter('woocommerce_checkout_fields', 'add_custom_checkout_field');
function add_custom_checkout_field($fields) {
    $fields['billing']['billing_inn'] = array(
        'type'        => 'text',
        'label'       => __('ИНН', 'woocommerce'),
        'required'    => true,
        'class'       => array('form-row-wide'),
        'clear'       => true,
        'priority'    => 110,
    );
    return $fields;
}

2. Валидация поля на оформлении заказа

add_action('woocommerce_checkout_process', 'validate_custom_checkout_field');
function validate_custom_checkout_field() {
    if (empty($_POST['billing_inn']) || !preg_match('/^\d{10,12}$/', $_POST['billing_inn'])) {
        wc_add_notice(__('Пожалуйста, введите корректный ИНН (10-12 цифр).'), 'error');
    }
}

3. Сохранение и отображение поля в заказе

Сохраним ИНН в метаданных заказа и добавим его в админку:

add_action('woocommerce_checkout_update_order_meta', 'save_custom_checkout_field');
function save_custom_checkout_field($order_id) {
    if (!empty($_POST['billing_inn'])) {
        update_post_meta($order_id, '_billing_inn', sanitize_text_field($_POST['billing_inn']));
    }
}

add_action('woocommerce_admin_order_data_after_billing_address', 'display_custom_checkout_field_admin_order', 10, 1);
function display_custom_checkout_field_admin_order($order){
    $inn = get_post_meta($order->get_id(), '_billing_inn', true);
    if ($inn) {
        echo '<p><strong>ИНН:</strong> ' . esc_html($inn) . '</p>';
    }
}

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

  • Откройте страницу регистрации: дополнительное поле ИНН должно отображаться.
  • Попробуйте зарегистрироваться, оставив поле пустым или некорректным — должна появиться ошибка.
  • Зарегистрируйтесь с корректным ИНН, затем проверьте в админке WordPress в профиле пользователя наличие мета-поля.
  • Перейдите к оформлению заказа, убедитесь, что поле ИНН есть среди адресных данных.
  • Попытайтесь оформить заказ с пустым или неправильным ИНН — получите ошибку.
  • Завершите заказ с корректным ИНН и проверьте отображение этого значения в админке заказа.

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

  • Поле не отображается. Проверьте, что код добавлен в активную тему или плагин, нет синтаксических ошибок.
  • Валидация не срабатывает. Убедитесь, что имя поля в $_POST совпадает с указанным в форме.
  • Значение не сохраняется. Проверьте права пользователя и используйте корректные хуки woocommerce_created_customer для регистрации и woocommerce_checkout_update_order_meta для оформления заказа.
  • Ошибка XSS или некорректное отображение. Всегда используйте esc_html и sanitize_text_field для вывода и сохранения пользовательских данных.

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

  • Не используйте плагины для простого добавления полей, если задача ограничивается парой полей — код в теме быстрее и безопаснее.
  • Для защиты от CSRF используйте стандартные nonce WooCommerce, если усложняете формы.
  • Валидация должна проходить как на клиенте (JS), так и на сервере (PHP).
  • Храните данные в пользовательских метах или метаполях заказа, не создавайте лишних таблиц.

Сравнение способов реализации

МетодПлюсыМинусыКогда использовать
Добавление полей через код в functions.phpБыстро, без сторонних плагинов, высокая производительность, контрольТребует навыков PHP, возможность ошибок при некорректном кодеМалые и средние проекты, кастомизация под задачи
Плагины для кастомных полейУдобство, визуальный интерфейс, расширенный функционалДополнительная нагрузка, возможные конфликты, зависимость от разработчикаБольшие проекты, нестандартные требования, отсутствие навыков кодинга
WooCommerce: как использовать хуки для добавления пользовательских функций
07.05.2026
Как установить и настроить ABC Pagination в WordPress для удобной пагинации
14.02.2026
Как использовать WordPress Cron для автоматизации задач
13.12.2025
Как создать автоматические редакции постов в WordPress
26.03.2026
Как создать автоматические уведомления о неактивных пользователях в WordPress
20.01.2026

Уроки со скриншотами, подробные руководства