WPOrders

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

Если для заказа нужно собрать не только имя, телефон и адрес, а ещё комментарий, номер подъезда, ИНН или любую другую информацию, это лучше делать прямо в оформлении заказа WooCommerce. Тогда покупатель вводит данные в привычном месте, а менеджер видит их в заказе и не тратит время на уточнения.

В WooCommerce есть несколько способов добавить поле в checkout. Самый надёжный для типовой задачи — через код в дочерней теме или небольшом собственном плагине. Плагины для настройки checkout тоже подходят, но не всегда нужны: если поле одно или два, код обычно проще, прозрачнее и не добавляет лишнюю зависимость от стороннего расширения.

Когда поле действительно стоит добавлять в checkout

Дополнительное поле имеет смысл, если без него магазин не сможет нормально обработать заказ или доставку. Например:

  • курьеру нужен номер подъезда, этаж, код домофона или комментарий к адресу;
  • для счёта или закрывающих документов нужен ИНН, название компании, КПП;
  • для самовывоза нужно уточнить время приезда или комментарий к заказу;
  • для сложных товаров нужен комментарий к комплектации, размеру, цвету, упаковке.

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

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

Ниже — рабочий вариант для добавления текстового поля в блок оформления заказа. Код лучше размещать в дочерней теме или в собственном мини-плагине, а не в файле основной темы: при обновлении тема может перезаписаться.

Перед изменениями сделайте резервную копию сайта или хотя бы базы данных. Если вы уже используете кастомизацию checkout, проверьте её на тестовой копии сайта: разные темы и плагины могут по-разному выводить поля и ошибки валидации.

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

add_filter( 'woocommerce_checkout_fields', 'wporders_add_checkout_field' );
function wporders_add_checkout_field( $fields ) {
    $fields['billing']['billing_apartment'] = array(
        'type'        => 'text',
        'label'       => 'Номер квартиры / подъезда',
        'placeholder' => 'Например, 12 или 3 подъезд',
        'required'    => false,
        'class'       => array( 'form-row-wide' ),
        'priority'    => 120,
    );

    return $fields;
}

add_action( 'woocommerce_checkout_create_order', 'wporders_save_checkout_field', 10, 2 );
function wporders_save_checkout_field( $order, $data ) {
    if ( isset( $_POST['billing_apartment'] ) ) {
        $order->update_meta_data( '_billing_apartment', sanitize_text_field( wp_unslash( $_POST['billing_apartment'] ) ) );
    }
}

add_action( 'woocommerce_admin_order_data_after_billing_address', 'wporders_show_checkout_field_admin', 10, 1 );
function wporders_show_checkout_field_admin( $order ) {
    $value = $order->get_meta( '_billing_apartment' );
    if ( $value ) {
        echo '<p><strong>Номер квартиры / подъезда:</strong> ' . esc_html( $value ) . '</p>';
    }
}

add_filter( 'woocommerce_email_order_meta_fields', 'wporders_show_checkout_field_email', 10, 3 );
function wporders_show_checkout_field_email( $fields, $sent_to_admin, $order ) {
    $value = $order->get_meta( '_billing_apartment' );
    if ( $value ) {
        $fields['billing_apartment'] = array(
            'label' => 'Номер квартиры / подъезда',
            'value' => $value,
        );
    }

    return $fields;
}

Что здесь важно:

  • woocommerce_checkout_fields добавляет поле в форму оформления заказа;
  • woocommerce_checkout_create_order сохраняет значение в метаданные заказа;
  • woocommerce_admin_order_data_after_billing_address выводит поле в карточке заказа в админке;
  • woocommerce_email_order_meta_fields добавляет данные в письма WooCommerce.

Если вам нужен не текст, а, например, выпадающий список, чекбокс или поле с обязательным форматом, тип поля можно заменить. Но для большинства практических задач — комментарий, подъезд, ИНН, номер офиса — текстовое поле остаётся самым удобным вариантом.

Как сделать поле обязательным

Иногда поле нужно не просто показать, а заставить покупателя заполнить его. Например, без ИНН нельзя выставить счёт, а без комментария курьер не найдёт адрес. В этом случае в массиве поля ставят 'required' => true.

Но обязательность стоит включать только тогда, когда без этого значения заказ действительно нельзя обработать. Иначе вы создадите лишний барьер на checkout. Для мобильных пользователей это особенно чувствительно: чем больше обязательных полей, тем выше шанс, что заказ не будет завершён.

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

Куда лучше вставлять поле: в billing, shipping или отдельный блок

В WooCommerce поля checkout обычно группируются в разделы billing и shipping. Это удобно, если поле связано с оплатой или доставкой. Например, ИНН логично хранить в блоке оплаты, а комментарий к доставке — в блоке доставки.

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

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

Как проверить, что поле работает правильно

После добавления поля не ограничивайтесь визуальной проверкой на странице checkout. Нужно убедиться, что значение действительно сохраняется и доступно в обработке заказа.

  1. Откройте оформление заказа в браузере на десктопе и на телефоне.
  2. Заполните новое поле и оформите тестовый заказ.
  3. Проверьте карточку заказа в админке WooCommerce.
  4. Откройте письмо о новом заказе и убедитесь, что поле там отображается, если это нужно менеджеру.
  5. Если поле обязательное, попробуйте отправить заказ без него и проверьте текст ошибки.

Если значение не сохраняется, чаще всего причина в одном из трёх мест: код вставлен не туда, в теме или плагине есть конфликт с checkout, либо поле добавлено, но не сохранено в метаданные заказа. В таких случаях полезно временно отключить сторонние плагины, которые меняют оформление заказа, и проверить работу на стандартной теме WooCommerce-совместимого типа.

Что учитывать в реальном магазине

На практике checkout — это не просто форма, а часть цепочки каталог → карточка товара → корзина → оформление заказа → оплата → доставка → обработка заказа. Если вы добавляете поле, оно должно помогать этой цепочке, а не ломать её.

Например, для самовывоза поле с подъездом не нужно. Для курьерской доставки оно может быть критичным. Для зарегистрированного пользователя часть данных можно хранить в профиле, но для гостевого заказа их придётся вводить каждый раз. Для вариативных товаров иногда полезно собирать комментарий именно в checkout, а не в карточке товара, если пожелание относится ко всему заказу целиком.

Если у вас магазин на WooCommerce с аккуратной структурой каталога, карточек и оформления заказа, тема вроде Bono может помочь не только с визуальной частью, но и с более предсказуемым поведением страниц магазина. Но саму логику полей checkout всё равно лучше настраивать отдельно — темой это не заменяется.

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

Если нужен не код, а готовое управление полями

Когда полей несколько, а менять их нужно без правки кода, удобнее использовать плагин для настройки checkout. Это разумный вариант для владельца магазина, который не хочет каждый раз обращаться к разработчику. Но и здесь важно смотреть, как плагин сохраняет данные, поддерживает ли обязательность, условную логику и вывод в админке и письмах.

Для одного-двух полей код обычно надёжнее и легче в сопровождении. Для более сложных сценариев — например, когда поле показывается только при выборе определённого способа доставки или оплаты, — уже может понадобиться отдельное расширение или доработка под конкретный магазин.

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

×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее