WooCommerce: как добавить дополнительные поля в заказ без плагинов

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

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

Пошаговое добавление дополнительных полей в оформление заказа WooCommerce

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

Для начала добавим поле, например, "Комментарий для курьера". Используем хук woocommerce_after_order_notes для вывода поля.

add_action('woocommerce_after_order_notes', 'wplike_custom_checkout_field');
function wplike_custom_checkout_field( $checkout ) {
    echo '<div id="wplike_custom_checkout_field">';
    woocommerce_form_field( 'wplike_courier_comment', array(
        'type'          => 'text',
        'class'         => array('wplike-courier-comment form-row-wide'),
        'label'         => __('Комментарий для курьера'),
        'placeholder'   => __('Введите комментарий'),
        'required'      => false,
    ), $checkout->get_value( 'wplike_courier_comment' ) );
    echo '</div>';
}

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

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

add_action('woocommerce_checkout_process', 'wplike_custom_checkout_field_process');
function wplike_custom_checkout_field_process() {
    if ( isset($_POST['wplike_courier_comment']) && empty($_POST['wplike_courier_comment']) ) {
        wc_add_notice( __('Пожалуйста, заполните комментарий для курьера.'), 'error' );
    }
}

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

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

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

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

Чтобы видеть комментарий менеджерам, добавим вывод в метабоксе заказа:

add_action( 'woocommerce_admin_order_data_after_billing_address', 'wplike_display_custom_field_admin_order', 10, 1 );
function wplike_display_custom_field_admin_order( $order ) {
    $comment = get_post_meta( $order->get_id(), '_wplike_courier_comment', true );
    if ( $comment ) {
        echo '<p><strong>Комментарий для курьера:</strong> ' . esc_html( $comment ) . '</p>';
    }
}

Проверка результата

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

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

  • Поле не отображается на странице оформления заказа — проверьте, что функция подключена через правильный хук woocommerce_after_order_notes и нет конфликтов с темой или другими плагинами.
  • Данные не сохраняются в заказе — убедитесь, что имя поля в $_POST совпадает с используемым в функции сохранения и что используется правильный хук woocommerce_checkout_update_order_meta.
  • Комментарий не виден в админке — проверьте, что метаполе читается по правильному ключу (_wplike_courier_comment) и что функция вывода подключена к woocommerce_admin_order_data_after_billing_address.
  • Валидация не работает — убедитесь, что функция проверки подключена к woocommerce_checkout_process и что для вывода ошибок используется wc_add_notice.

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

  • Всегда используйте функции sanitize_text_field или аналогичные для очистки пользовательских данных перед сохранением.
  • Не добавляйте избыточных полей, чтобы не перегружать форму и базу данных.
  • Для сложных полей (например, даты, селекты) используйте соответствующие типы в woocommerce_form_field для упрощения валидации.
  • Проверяйте наличие AJAX-запросов и совместимость с темой, чтобы поля корректно отображались и не вызывали ошибок JavaScript.

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

МетодПлюсыМинусы
Программное добавление (как в статье)Контроль над кодом, легковесность, гибкостьТребует навыков программирования, ручное обновление
Плагины (например, Checkout Field Editor)Простота настройки, визуальный интерфейсДополнительная нагрузка, возможные конфликты
Использование кастомных тем с поддержкой полейИнтеграция, единый стильОграничена возможностями темы, сложнее поддерживать
WooCommerce: как автоматически обновлять статус заказа при возврате платежа
30.05.2026
WooCommerce: автоматическое заполнение адреса доставки по email покупателя
23.04.2026
Как добавить уникальное метаполе к записям WordPress без плагинов
25.02.2026
Как установить уникальные атрибуты alt к картинкам WordPress автоматически
15.01.2026
Как настроить автоматический импорт постов в WordPress с помощью REST API
13.03.2026