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

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

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

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

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

Для добавления пользовательского поля используется хук woocommerce_checkout_fields, который позволяет модифицировать массив полей формы. В нашем примере добавим текстовое поле с меткой "Номер партнера":

add_filter('woocommerce_checkout_fields', 'add_custom_checkout_field');
function add_custom_checkout_field($fields) {
    $fields['billing']['billing_partner_number'] = array(
        'type'        => 'text',
        'label'       => 'Номер партнера',
        'placeholder' => 'Введите номер партнера',
        'required'    => false,
        'class'       => array('form-row-wide'),
        'clear'       => true,
        'priority'    => 120,
    );
    return $fields;
}

Поле добавится в блок с биллингом после стандартных полей, благодаря параметру priority.

Шаг 2. Валидация введённых данных

Если поле обязательное, следует добавить валидацию. Пример для обязательного поля "Номер партнера":

add_action('woocommerce_checkout_process', 'validate_partner_number_field');
function validate_partner_number_field() {
    if (isset($_POST['billing_partner_number']) && empty(trim($_POST['billing_partner_number']))) {
        wc_add_notice('Пожалуйста, укажите номер партнера.', 'error');
    }
}

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

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

add_action('woocommerce_checkout_update_order_meta', 'save_partner_number_order_meta');
function save_partner_number_order_meta($order_id) {
    if (!empty($_POST['billing_partner_number'])) {
        update_post_meta($order_id, '_billing_partner_number', sanitize_text_field($_POST['billing_partner_number']));
    }
}

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

Чтобы увидеть поле в админке WooCommerce (редактирование заказа), добавим следующий код:

add_action('woocommerce_admin_order_data_after_billing_address', 'display_partner_number_admin_order_meta', 10, 1);
function display_partner_number_admin_order_meta($order){
    $partner_number = get_post_meta($order->get_id(), '_billing_partner_number', true);
    if ($partner_number) {
        echo '<p><strong>Номер партнера:</strong> ' . esc_html($partner_number) . '</p>';
    }
}

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

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

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

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

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

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

Сравнение способов добавления дополнительного поля

СпособПлюсыМинусы
Код в functions.phpПолный контроль, нет зависимости от плагинов, лёгкость настройкиТребует навыков разработки, риск ошибок, поддержка при обновлениях темы
Плагины (например, Checkout Field Editor)Удобный интерфейс, быстрая настройка, нет необходимости кодитьДополнительная нагрузка, возможные конфликты, ограниченная кастомизация
Как создать динамические блоки в Elementor с помощью Custom Post Types
16.12.2025
WooCommerce: как использовать хуки для дополнительной функциональности оформления заказа
29.05.2026
WooCommerce: автоматическое отключение товаров при отсутствии наличия
29.05.2026
Как добавить нестандартные элементы в Elementor с помощью кода
28.12.2025
Как добавить анимацию в Elementor: практическое руководство
01.01.2026