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

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

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

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

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

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

add_action('woocommerce_after_order_notes', 'wpbegin_add_custom_checkout_field');
function wpbegin_add_custom_checkout_field($checkout) {
    echo '<div id="wpbegin_custom_checkout_field">';
    woocommerce_form_field('tax_number', array(
        'type'          => 'text',
        'class'         => array('form-row-wide'),
        'label'         => __('Номер налогоплательщика'),
        'placeholder'   => __('Введите номер налогоплательщика'),
        'required'      => true,
    ), $checkout->get_value('tax_number'));
    echo '</div>';
}

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

Используем хук woocommerce_checkout_process для валидации данных. Если поле пустое и обязательное — выводим ошибку и не даём оформить заказ:

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

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

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

add_action('woocommerce_checkout_update_order_meta', 'wpbegin_save_custom_checkout_field');
function wpbegin_save_custom_checkout_field($order_id) {
    if ( ! empty($_POST['tax_number']) ) {
        update_post_meta($order_id, '_tax_number', sanitize_text_field($_POST['tax_number']));
    }
}

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

Добавим отображение с помощью хука woocommerce_admin_order_data_after_billing_address:

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

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

  • Перейдите на страницу оформления заказа — должно появиться новое поле.
  • Попробуйте оформить заказ без заполнения — должна появиться ошибка.
  • После успешного оформления заказа проверьте в админке WooCommerce заказ — поле с номером налогоплательщика должно отображаться в блоке данных покупателя.

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

  • Поле не отображается на странице оформления заказа. Проверьте, что код подключён в functions.php активной темы или в плагине, и что хуки не конфликтуют с другими плагинами.
  • Ошибка валидации не показывается. Убедитесь, что wc_add_notice вызывается внутри woocommerce_checkout_process, и что тема правильно отображает сообщения об ошибках.
  • Данные не сохраняются в заказе. Проверьте, что в форме поле имеет атрибут name="tax_number" и что $_POST['tax_number'] доступен.
  • Поле не показывается в админке. Убедитесь, что используемый хук woocommerce_admin_order_data_after_billing_address подключён и что функция получает объект заказа.

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

  • Обязательно применяйте sanitize_text_field() для очистки данных перед сохранением в базу.
  • Не делайте поле необязательным, если оно критично для бизнес-процесса, чтобы избежать пустых данных.
  • Для более сложных полей используйте типы select или checkbox с чётко определёнными значениями, чтобы снизить риск ошибок.
  • Если добавляете много дополнительных полей, подумайте об их группировке в отдельный метабокс в админке для удобства управления.

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

СпособПлюсыМинусыКогда использовать
Добавление через хуки (как в статье)Полный контроль, без дополнительных плагиновТребует навыков PHP, возможны ошибки при обновлениях WooCommerceЕсли нужен точечный функционал без установки плагинов
Плагины для кастомизации Checkout (например, Checkout Field Editor)Простой интерфейс, быстрое добавлениеМожет быть избыточным, нагрузка на сайтЕсли нужно много полей и нет навыков программирования
Использование кастомных плагинов от WPShop (например, Expert Review для отзывов)Интеграция с экосистемой, поддержкаМожет не покрывать все кастомные задачиДля комплексных решений в рамках WPShop
Автоматический импорт данных из Google Sheets в WordPress: практическое руководство
18.01.2026
Как использовать WPCommunity для создания своего сообщества на WordPress
16.03.2026
Оптимизация базы данных WordPress: практические советы
05.11.2025
Как удалить старые версии постов в WordPress для оптимизации базы данных
12.03.2026
WooCommerce: как добавить пользовательское поле в форму оплаты через хук
18.04.2026