Добавить дополнительное поле для оформления заказа woocommerce

я пытаюсь добавить дополнительное поле к кнопке заказа размещения woocommerce, используя

/**
 * Add PO checkout field 
 */

add_action( 'woocommerce_review_order_before_payment', 'invoice_po' );
function invoice_po($checkout)
    { 
    woocommerce_form_field('invoice_po_field', array(
        'type' => 'text',
        'class' => array(
            'form-row-wide') ,
            'label' => __('Invoice Customer PO') ,
            'placeholder' => __('PO123456789') ,
            'required' => true,
    ) , $checkout->get_value('invoice_po_field'));
}

add_action('woocommerce_checkout_update_order_meta', 'add_po_to_order_meta');
function add_po_to_order_meta($order_id)
{
  if (!empty($_POST['invoice_po_field'])) {
    update_post_meta($order_id, 'Invoice Field', sanitize_text_field($_POST['invoice_po_field']));
  }
}

этот метод отлично работает, если я хочу добавить его до или после примечаний к заказу, но не будет работать, если я попытаюсь добавить кнопку до размещения заказа. Кто-нибудь знает, почему я не могу добавить поле в этот раздел?

Как убрать количество товаров в категории WooCommerce
Как убрать количество товаров в категории WooCommerce
По умолчанию WooCommerce показывает количество товаров рядом с категорией, как показано ниже.
0
0
146
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ошибка с моим кодом была ($ checkout) эта переменная имеет отношение только к разделу адресов и примечаний клиентов на странице оформления заказа, чтобы разрешить доступ ко всем крючкам страницы, которые я только что удалил.

/**
 * Add PO checkout field 
 */
add_action( 'woocommerce_review_order_before_payment', 'invoice_po');
function invoice_po()
{
    $user = wp_get_current_user();
    if (in_array('invoice_customer', $user->roles)) {
        woocommerce_form_field('invoice_po_field', array(
            'type' => 'text',
            'class' => array('form-row-wide') ,
            'label' => __('Invoice Customer PO') ,
            'placeholder' => __('PO123456789') ,
            'required' => true
        ));
    }
}

add_action('woocommerce_checkout_update_order_meta', 'add_po_to_order_meta');
function add_po_to_order_meta($order_id)
{
  if (!empty($_POST['invoice_po_field'])) {
    update_post_meta($order_id, 'Invoice Field', sanitize_text_field($_POST['invoice_po_field']));
  }
}

Другие вопросы по теме