Чтобы добавить поле в checkout WooCommerce, сначала определите тип страницы оформления заказа. Для нового Checkout Block предназначен официальный API дополнительных полей; многие плагины и PHP-хуки классического checkout работают только с shortcode-страницей.
Определите тип checkout
Откройте в WordPress страницу оформления заказа. Если редактор показывает блок «Оформление заказа / Checkout», используйте поддержку WooCommerce Blocks. Если страница построена на классическом shortcode, действуют другие хуки и расширения. Не смешивайте оба подхода в одном рецепте.
Вариант A: добавление поля для Checkout Block
В современном блочном оформлении WooCommerce предлагает woocommerce_register_additional_checkout_field(). Поле регистрируется после инициализации WooCommerce; требования к минимальной версии, поддерживаемым типам полей и сохранению значений нужно сверить с документацией установленной версии.
Три местоположения
contact— сведения о покупателе, которые могут быть сохранены в профиле клиента.address— адресные данные; поле может отображаться для адреса оплаты и доставки.order— дополнительная информация, относящаяся к конкретному заказу.
Официальная схема с безопасными проверками для разработчика:
add_action( 'woocommerce_init', function () {
if ( ! function_exists( 'woocommerce_register_additional_checkout_field' ) ) {
return;
}
woocommerce_register_additional_checkout_field( array(
'id' => 'my-store/delivery-comment',
'label' => __( 'Комментарий к доставке', 'my-store' ),
'location' => 'order',
'type' => 'text',
'required' => false,
) );
} );
Это иллюстративный пример для staging, а не готовый плагин: используйте собственный уникальный namespace, проверьте версию WooCommerce, валидацию, обработку персональных данных и отображение поля в админке заказа. Размещайте код в собственном плагине, а не в файлах ядра и не в случайном functions.php рабочей темы.
Вариант B: классический checkout
Для shortcode checkout могут использоваться редакторы полей и классические хуки WooCommerce. Перед установкой такого расширения посмотрите ограничение по поддержке блоков: например официальный Checkout Field Editor явно относится к legacy checkout. Не переводите работающий сайт на старый checkout только ради одного поля без аудита других расширений.
Что проверять после сохранения
- Поле отображается у незалогиненного покупателя и у клиента с аккаунтом.
- Необязательное поле не блокирует заказ, когда оно пустое.
- Данные читаются из созданного заказа, а не только видны в форме.
- Поле не ломает оплату, доставку и обязательную валидацию.
- Персональные данные не попадают в открытый журнал, URL или сторонние аналитические события.
Частые ошибки
Поле видно, но не сохраняется: использован несовместимый механизм для типа checkout или отсутствует правильная обработка данных. Поле дублируется: одновременно активны два расширения, настраивающие одну область. После обновления исчезло: сравните версии WooCommerce и расширений на staging.
Для следующего шага пригодится проверка методов оплаты и диагностика заказа.
Материал был полезен?
Помогите нам сделать материалы точнее и понятнее.