Woocommerce, Оформление заказа, заказ -> Расширенное пользовательское поле: установка значения из HTML-селектора

#php #wordpress #woocommerce #advanced-custom-fields

#php #wordpress #woocommerce #расширенные пользовательские поля

Вопрос:

Как мне установить значение пользовательского поля в заказе при отправке заказа на выбранное значение в HTML-компоненте?

Я внедрил пользовательский HTML-компонент внутри формы оформления заказа, выбранное значение которого я хочу вставить в пользовательское поле в своих заказах. Но я не могу понять, как подключить эти вещи. Я пришел к чему-то вроде:

 add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );

function custom_override_checkout_fields( $fields ) {
     $fields['order']['special_delivery'] = 'The value from HTML';
     return $fields;
}
  

Но я даже не уверен, что это правильный путь.

Есть идеи?

Ответ №1:

Использование woocommerce_after_checkout_billing_form позволяет добавлять пользовательские поля в форму оформления заказа. Вам также необходимо сохранить поле в мета — порядке использования woocommerce_checkout_update_order_meta .

В следующем коде есть настраиваемое текстовое поле, используемое для сохранения идентификатора плательщика НДС. Не стесняйтесь избавляться от префиксов «mrank». Также переименуйте поле по мере необходимости.

Он покажет вам, как добавить поле и сохранить в мета-порядке.

 /**
* VAT Number in WooCommerce Checkout
*/
function mrank_vat_field( $checkout ) {

      echo '<div id="mrank_vat_field">';
   
      woocommerce_form_field( 'vat_number', array(
            'type'          => 'text',
            'class'         => array( 'vat-number-field form-row-wide') ,
            'label'         => __( 'VAT-ID' ),
            'placeholder'   => __( 'Enter number' ),
            'description' => __( 'Please enter your VAT-ID' ),
            'required'    => true,
      ), $checkout->get_value( 'vat_number' ));
    
    echo '</div>';
}
add_action( 'woocommerce_after_checkout_billing_form', 'mrank_vat_field' );


/**
* Save VAT Number in the order meta
*/
function mrank_checkout_vat_number_update_order_meta( $order_id ) {
    if ( ! empty( $_POST['vat_number'] ) ) {
        update_post_meta( $order_id, '_vat_number', sanitize_text_field( $_POST['vat_number'] ) );
    }
}
add_action( 'woocommerce_checkout_update_order_meta', 'mrank_checkout_vat_number_update_order_meta' );
  

Комментарии:

1. Я попытался реализовать то, что вы описали. Похоже, это не работает. Но это определенно кажется правильным способом делать что-то. Я думаю, что проблема заключается в том, что я хотел бы сохранить значение в расширенном пользовательском поле. В вашем примере используются более распространенные метаполя, не так ли? Как бы мне вставить это значение в пользовательское поле?

2. Есть ли причина, по которой вы хотите использовать расширенные пользовательские поля вместо мета-поля в заказе? Я не вижу причины, по которой это могло бы иметь значение. Но, конечно, вы можете update_post_meta( ...) просто добавить функцию для обновления вашего ACF-поля: update_field( 'field_key', sanitize_text_field( $_POST['vat_number'], $order_id );

3. Нет особенно веской причины, кроме того, что он настроен таким образом: D Я все еще не могу заставить его работать. Я чувствую, что делаю именно то, что вы описываете. Я обновил начальный пост, указав, что такое мой код, если бы вы могли видеть, что я делаю неправильно, это было бы потрясающе! 🙂

4. Куда вы поместили этот код? Внутри пользовательского плагина или functions.php , или где-то еще? Если вам не нужно использовать ACF, пожалуйста, просто используйте мой «update_post_meta», потому что в вашем заказе будет новое мета-поле, и это нормально. Нет необходимости в ACF 😉

5. Я помещаю это внутрь form-billing.php : о