Как запретить пользователям редактировать платежный адрес в WooCommerce checkout?


Есть ли способ запретить пользователям редактировать свой платежный адрес на странице оформления заказа?

Я пытаюсь достичь состояния, при котором пользователь может видеть текущий платежный адрес, но не может изменить его, не связавшись с администратором магазина. Пользователь может изменить только адрес доставки заказа. Оба адреса все равно должны быть прикреплены к заказу.

Моим текущим решением было полностью удалить поля с помощью крючка woocommerce_billing_fields и распечатать платежный адрес поля в виде статического html вместо этого, но тогда платежный адрес вообще не отображается в заказе.

Author: Roope, 2018-07-31

1 answers

Хорошо, я нашел решение после вялого разговора. Можно удалить поля из проверки, отключив их в woocommerce_billing_fields крючке, а затем повторно добавив значения в заказ из профиля пользователя с помощью крючка woocommerce_checkout_posted_data.

add_filter( 'woocommerce_checkout_posted_data', 'fill_order_billing_details' );

function fill_order_billing_details( $data ) {
  $customer_id = get_current_user_id();

  $data['billing_first_name'] = get_user_meta( $customer_id, 'billing_first_name', true );
  $data['billing_last_name']  = get_user_meta( $customer_id, 'billing_last_name', true );
  $data['billing_company']    = get_user_meta( $customer_id, 'billing_company', true );
  $data['billing_country']    = get_user_meta( $customer_id, 'billing_country', true );
  $data['billing_address_1']  = get_user_meta( $customer_id, 'billing_address_1', true );
  $data['billing_address_2']  = get_user_meta( $customer_id, 'billing_address_2', true );
  $data['billing_city']       = get_user_meta( $customer_id, 'billing_city', true );
  $data['billing_state']      = get_user_meta( $customer_id, 'billing_state', true );
  $data['billing_postcode']   = get_user_meta( $customer_id, 'billing_postcode', true );
  $data['billing_phone']      = get_user_meta( $customer_id, 'billing_phone', true );
  $data['billing_email']      = get_user_meta( $customer_id, 'billing_email', true );

  return $data;
}
 0
Author: Roope, 2018-08-01 11:30:42