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

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

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

Часто сталкиваемся с такими вопросами:

  • Как добавить новое поле в раздел биллинга или доставки;
  • Как сохранить данные в заказе и вывести их в админке;
  • Как сделать поле обязательным;
  • Как отобразить данные в email уведомлениях и на странице заказа пользователя.

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

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

Используем хук woocommerce_checkout_fields для добавления своего поля. В примере добавим поле «Номер налогоплательщика» в биллинговую часть:

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

2. Проверяем обязательность поля при отправке формы

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

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

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

Используем хук woocommerce_checkout_update_order_meta:

add_action('woocommerce_checkout_update_order_meta', 'save_tax_number_order_meta');
function save_tax_number_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_admin_order_data_after_billing_address:

add_action('woocommerce_admin_order_data_after_billing_address', 'display_tax_number_admin_order', 10, 1);
function display_tax_number_admin_order($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>';
    }
}

5. Показываем поле в email уведомлениях

Для этого используем фильтр woocommerce_email_order_meta_fields:

add_filter('woocommerce_email_order_meta_fields', 'add_tax_number_to_email');
function add_tax_number_to_email($fields) {
    $fields['billing_tax_number'] = array(
        'label' => __('Номер налогоплательщика'),
        'value' => get_post_meta(wc_get_order()->get_id(), '_billing_tax_number', true),
    );
    return $fields;
}

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

  • Перейдите на страницу оформления заказа и убедитесь, что появилось новое поле с нужной меткой.
  • Попробуйте отправить форму без заполнения — должна появиться ошибка.
  • Оформите заказ с заполненным полем.
  • В админке откройте заказ — поле с вашим значением должно отображаться в блоке с адресом.
  • Проверьте email уведомление — в нем должно быть отображено новое поле.

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

  • Поле не отображается на сайте: Проверьте, что функция добавления поля подключена в файле functions.php или в плагине, и что хук woocommerce_checkout_fields не переопределяется другим кодом.
  • Ошибка не возникает при пустом поле: Убедитесь, что используете хук woocommerce_checkout_process, а не init, и что в $_POST приходит правильное имя поля.
  • Данные не сохраняются: Проверьте, что в функции сохранения используется sanitize и корректное имя поля, а также что хук woocommerce_checkout_update_order_meta подключен.
  • Поле не отображается в email: В фильтре woocommerce_email_order_meta_fields убедитесь, что передается правильный ID заказа и поле существует в мета.

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

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

Сравнение способов добавления полей: код vs плагины

МетодПреимуществаНедостатки
Добавление кода вручнуюПолный контроль, минимум зависимостей, легко кастомизироватьТребует знаний PHP, можно допустить ошибки
Использование плагинов (например, Checkout Field Editor)Простота установки, визуальное редактирование, быстрый стартДополнительная нагрузка, возможны конфликты, ограниченная кастомизация без доп. кода
Как изменить атрибуты товаров WooCommerce в зависимости от роли пользователя
30.05.2026
Как автоматизировать управление пользователями в WordPress: практические решения с кодом и плагинами
09.04.2026
Как избежать проблем с просмотром видео в WordPress: практические решения и плагины
08.01.2026
Как создать автоматическую переадресацию по условиям в WordPress с примерами кода
30.03.2026
Как использовать REST API в WordPress для создания приложений
29.11.2025