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

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

В стандартном оформлении заказа WooCommerce часто не хватает специфичных полей для сбора информации, например, параметров из калькулятора или дополнительной информации по доставке. Без добавления дополнительных полей невозможно сохранить и использовать эти данные в заказе, отчетах и уведомлениях.

Поэтапное решение: добавляем и сохраняем дополнительные поля в заказ WooCommerce

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

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

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

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

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

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

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

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

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

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

Добавим вывод поля в метабоксе заказа:

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

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

  • Перейдите на страницу оформления заказа и убедитесь, что поле «Дополнительная информация» отображается.
  • Попробуйте оформить заказ с заполненным и пустым полем (если оно обязательное) для проверки валидации.
  • После оформления зайдите в админку WooCommerce, откройте заказ и проверьте, что дополнительная информация отображается в блоке с данными заказа.
  • Проверьте, что поле корректно сохраняется и выводится при повторном просмотре.

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

  • Поле не отображается на странице оформления заказа. Проверьте, подключен ли ваш код через хуки и нет ли синтаксических ошибок. Хук woocommerce_after_order_notes должен использоваться в правильном контексте.
  • Данные не сохраняются в заказе. Проверьте, что имя name поля совпадает с ключом, который вы используете в $_POST, и что функция update_post_meta вызывается с корректным ID заказа.
  • Валидация не срабатывает. Убедитесь, что хук woocommerce_checkout_process подключен и ошибки добавляются через wc_add_notice с типом error.
  • Данные не отображаются в админке. Проверьте, что используете правильный хук woocommerce_admin_order_data_after_billing_address и получаете мета по правильному ключу.

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

  • Используйте sanitize_text_field или подходящие функции очистки данных для предотвращения XSS и других уязвимостей.
  • Не храните в метаполях большие объемы данных, чтобы не замедлять загрузку страницы заказа.
  • Если поле необязательное, делайте проверку наличия данных перед сохранением, чтобы не создавать пустые метаполя.
  • Для сложных полей (JSON, массивы) используйте сериализацию и десериализацию с помощью maybe_serialize и maybe_unserialize.

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

МетодПреимуществаНедостатки
Использование хуков и метаполей (код)Гибкость, полный контроль, отсутствие зависимости от плагиновТребует навыков программирования, возможны ошибки при неправильной реализации
Плагины для добавления полей (например, Checkout Field Editor)Простота настройки, визуальный интерфейсМожет замедлять сайт, ограниченная кастомизация, дополнительные обновления
Кастомные плагины с интеграцией калькулятораМаксимальная интеграция с бизнес-логикой, можно добавить автоматические расчетыРазработка и поддержка требуют ресурсов
Как использовать WP-Cron для автоматизации задач в WordPress
22.03.2026
WooCommerce: решение проблем с отправкой данных калькулятора в заказ
10.06.2026
Как создать многошаговую форму в WordPress с расчетом и AJAX
04.01.2026
Как отправить данные калькулятора в заказ WooCommerce: практическое руководство
07.05.2026
WooCommerce: как отправить данные калькулятора в заказ и обработать их
13.05.2026