Woocommerce Set Billing Address Необязательно - PullRequest
0 голосов
/ 11 июня 2018

Я изменил дизайн своей страницы оформления заказа Woo, чтобы показывать поля адреса выставления счета только при выбранном шлюзе Stripe, в противном случае, если выбран проверочный шлюз, я не хочу собирать их адрес выставления счета.Я закончил шаблон, и вызовы jQuery работают как шарм.Однако у меня возникли проблемы с заполнением полей адреса выставления счета и полей адреса доставки.

Вот что у меня есть ... Я добавил следующий фильтр, чтобы оба поля адреса были необязательными:

</p> <pre><code>add_filter( 'woocommerce_default_address_fields' , 'custom_override_default_address_fields'); function custom_override_default_address_fields( $fields ) { // add or remove billing fields you do not want $keys = array( 'first_name', 'last_name', 'company', 'address_1', 'address_2', 'city', 'postcode', 'state', 'country' ); foreach( $keys as $key ) { $fields[$key]['required'] = false; } return $fields;}

Я удаляю этот фильтр, когда шлюз Stripe выбран с помощью jQuery, чтобы поля адреса выставления счета отображались как требуется (и повторно применяются, если выбрана проверка), это поведение работает для полей адреса выставления счета.

Теперь мне нужно сделать так, чтобы поля адреса доставки отображались по мере необходимости, поэтому я попытался добавить следующий фильтр: </p> <pre><code>add_filter( 'woocommerce_checkout_fields', 'set_shipping_required_fields',9999 ); function set_shipping_required_fields( $fields ) { // add or remove billing fields you do not want $shipping_keys = array( 'first_name', 'last_name', 'address_1', 'city', 'postcode', 'state', ); foreach( $shipping_keys as $key ) { $fields['shipping']['shipping_'.$key]['required'] = true; } return $fields; }

При этом успешно будут отображаться shipping_first_name и shipping_last_name как требуетсяоднако остальные поля доставки изначально отображаются как требуется, но через долю секунды возвращаются к необязательным.У кого-нибудь есть советы, что я делаю неправильно, чтобы сделать поля адреса выставления счета необязательными и поля адреса доставки обязательными?Есть ли лучший способ?

1 Ответ

0 голосов
/ 10 сентября 2018

Вам следует использовать вместо этого фильтр-ловушку woocommerce_default_address_fields, как объяснено здесь .

/ Billing and shipping addresses fields
add_filter( 'woocommerce_default_address_fields' , 'filter_default_address_fields', 20, 1 );
function filter_default_address_fields( $address_fields ) {
// Only on checkout page
if( ! is_checkout() ) return $address_fields;

// All field keys in this array
$key_fields = array('country','first_name','last_name','company','address_1','address_2','city','state','postcode');

// Loop through each address fields (billing and shipping)
foreach( $key_fields as $key_field )
    $address_fields[$key_field]['required'] = false;

return $address_fields;
}

Поскольку платежная электронная почта и телефон уже требуются по умолчанию, если вы хотите, чтобы они не требовалисьВам понадобится этот дополнительный код:

// For billing email and phone - Make them not required
add_filter( 'woocommerce_billing_fields', 'filter_billing_fields', 20, 1 );
function filter_billing_fields( $billing_fields ) {
// Only on checkout page
if( ! is_checkout() ) return $billing_fields;

$billing_fields['billing_phone']['required'] = false;
$billing_fields['billing_email']['required'] = false;
return $billing_fields;

}

Весь код помещается в файл function.php вашей активной дочерней темы (или активной темы).Проверено и работает.

...