добавить дополнительное поле woocommerce checkout - PullRequest
0 голосов
/ 29 мая 2019

я пытаюсь добавить дополнительное поле к кнопке размещения заказа в 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']));
  }
}

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

1 Ответ

0 голосов
/ 01 июня 2019

Ошибка с моим кодом ($ 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']));
  }
}
...