ворд-пресс.рф
Решение

Поля оформления заказа WooCommerce: Checkout Block и классический checkout

Как добавить поле к заказу без конфликта с блочным checkout и где хранятся данные покупателя и заказа.

Чтобы добавить поле в 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 только ради одного поля без аудита других расширений.

Что проверять после сохранения

  1. Поле отображается у незалогиненного покупателя и у клиента с аккаунтом.
  2. Необязательное поле не блокирует заказ, когда оно пустое.
  3. Данные читаются из созданного заказа, а не только видны в форме.
  4. Поле не ломает оплату, доставку и обязательную валидацию.
  5. Персональные данные не попадают в открытый журнал, URL или сторонние аналитические события.

Частые ошибки

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

Для следующего шага пригодится проверка методов оплаты и диагностика заказа.

Источник: https://developer.woocommerce.com/docs/block-development/extensible-blocks/cart-and-checkout-blocks/additional-checkout-fields/

Материал был полезен?

Помогите нам сделать материалы точнее и понятнее.