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

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

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

Перед тем как приступать к реализации, убедитесь, что простые решения не подходят: например, поле "Примечание к заказу" уже есть, но оно не всегда удобно и не подходит для структурированных данных.

Пошаговое решение: добавление поля дополнительной информации

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

Для начала добавим поле с помощью хука woocommerce_after_order_notes. В этом примере добавим текстовое поле с id additional_info:

add_action('woocommerce_after_order_notes', function($checkout) {
    echo '<div id="additional_info_field">';
    woocommerce_form_field('additional_info', array(
        'type' => 'text',
        'class' => array('form-row-wide'),
        'label' => __('Дополнительная информация'),
        'placeholder' => __('Введите дополнительную информацию'),
        'required' => false,
    ), $checkout->get_value('additional_info'));
    echo '</div>';
});

2. Валидация поля на сервере

Если поле обязано быть заполнено, добавим проверку в обработчик:

add_action('woocommerce_checkout_process', function() {
    if (isset($_POST['additional_info']) && empty(trim($_POST['additional_info']))) {
        wc_add_notice(__('Пожалуйста, заполните дополнительную информацию'), 'error');
    }
});

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

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

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

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

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

add_action('woocommerce_admin_order_data_after_billing_address', function($order) {
    $additional_info = get_post_meta($order->get_id(), '_additional_info', true);
    if ($additional_info) {
        echo '<p><strong>Дополнительная информация:</strong> ' . esc_html($additional_info) . '</p>';
    }
});

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

Для тестирования:

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

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

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

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

  • Всегда очищайте и валидируйте вводимые данные перед сохранением с помощью sanitize_text_field или аналогичных функций.
  • Если поле не является обязательным, не вызывайте ошибку и не блокируйте оформление.
  • Для более сложных полей (например, textarea, select) корректно указывайте тип и параметры в woocommerce_form_field.
  • Если нужно вывести поле в email уведомлениях, добавьте соответствующий код с хуком woocommerce_email_order_meta_fields.

Сравнение способов добавления поля в WooCommerce

СпособПлюсыМинусыПример использования
Через код в functions.phpКонтроль, без сторонних плагинов, оптимально для одного-двух полейТребует навыков программирования, возможны ошибкиОписание в статье
Плагины (например, Checkout Field Editor)Простота, визуальный интерфейс, быстроДополнительная нагрузка, возможные конфликты, платные функцииОфициальный плагин
Шаблоны WooCommerce (override)Гибкость, можно менять расположение и стильТребует поддержки при обновлении темыРедактирование файла checkout/form-checkout.php
Как отключить Gutenberg и вернуть классический редактор в WordPress
17.02.2026
Как использовать Custom Post Types в WordPress для управления проектами
05.12.2025
Как добавить автоматические метаданные для картинок в WordPress
31.03.2026
Как изменить URL страницы в WordPress без перенаправления
30.11.2025
Как использовать AJAX в WordPress для отправки формы без перезагрузки страницы
07.01.2026