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

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

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

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

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

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

add_action('woocommerce_after_order_notes', 'wpabout_add_custom_checkout_field');
function wpabout_add_custom_checkout_field( $checkout ) {
    echo '<div id="wpabout_custom_checkout_field"><h2>Дополнительная информация</h2>';

    woocommerce_form_field( 'inn_field', array(
        'type'          => 'text',
        'class'         => array('inn-field form-row-wide'),
        'label'         => __('ИНН клиента'),
        'placeholder'   => __('Введите ИНН'),
        'required'      => true,
    ), $checkout->get_value( 'inn_field' ));

    echo '</div>';
}

2. Валидация пользовательского поля

Чтобы предотвратить отправку пустого или некорректного ИНН, добавим проверку через хук woocommerce_checkout_process:

add_action('woocommerce_checkout_process', 'wpabout_validate_custom_checkout_field');
function wpabout_validate_custom_checkout_field() {
    if ( ! $_POST['inn_field'] || strlen(trim($_POST['inn_field'])) < 10 ) {
        wc_add_notice( __('Пожалуйста, введите корректный ИНН (не менее 10 символов).'), 'error' );
    }
}

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

Используем хук woocommerce_checkout_update_order_meta для сохранения значения поля в метаданные заказа:

add_action('woocommerce_checkout_update_order_meta', 'wpabout_save_custom_checkout_field');
function wpabout_save_custom_checkout_field( $order_id ) {
    if ( ! empty( $_POST['inn_field'] ) ) {
        update_post_meta( $order_id, '_inn_field', sanitize_text_field( $_POST['inn_field'] ) );
    }
}

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

Чтобы менеджеры видели поле в админке, добавим вывод в метабоксы заказа:

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

Как проверить, что решение работает

  • На странице оформления заказа появилось новое поле «ИНН клиента».
  • При попытке оформить заказ без заполнения или с ИНН менее 10 символов появляется ошибка.
  • После успешного оформления заказ сохраняет значение поля.
  • В админке WooCommerce при просмотре заказа отображается значение ИНН.

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

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

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

  • Обязательно фильтруйте и санитизируйте входящие данные через sanitize_text_field или аналогичные функции.
  • Не делайте поле необязательным, если данные критичны для обработки заказа, чтобы избежать пустых значений.
  • Если нужно добавить несколько полей, группируйте их в отдельный <div> для удобства стилизации и поддержки.
  • Для кеширования и ускорения отображения мета-данных в админке используйте встроенные функции WooCommerce и WordPress.

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

МетодПлюсыМинусы
Добавление через хуки в functions.phpПрямое управление, не требует плагинов, гибкость настройкиТребует навыков разработки, возможность ошибок при обновлениях
Использование плагинов (например, Checkout Field Editor)Простой интерфейс, быстрая настройка без кодаЗависимость от стороннего кода, возможные конфликты, лишний вес
Модификация шаблонов WooCommerceПолный контроль над разметкой и стилямиСложнее в поддержке, может конфликтовать с обновлениями
Как автоматически изменять ALT и TITLE картинок в WordPress
03.04.2026
WooCommerce: как автоматически изменять стоимость товара при изменении атрибутов
14.06.2026
WooCommerce: как использовать хуки для добавления пользовательских полей в форму оформления заказа
18.05.2026
WooCommerce: как установить обновление количества товаров в корзине без перезагрузки страницы
10.06.2026
WooCommerce: как диагностировать и исправить отказы в платежах
18.04.2026