Как лучше скрывать поля доставки при выборе метода Самовывоз?
Сейчас ситуация такая: у нас поля типа Адрес доставки, время доставки обязательны, нужно сделать так, чтобы при выборе Самовывоз эти поля скрывались и становились не обязательными соответственно. Ниже пример реализации, но у меня не работает, помогите с решением
Наши поля:
billing_state - город billing_wooccm18 - адрес billing_wooccm20 - дата billing_wooccm21 - Время доставки billing_wooccm19 - Время доставки
Сейчас ситуация такая: получается у нас Самовывоз поле в Санкт-Петербург и Лен обл (shipping_method_0_local_pickup-106 и shipping_method_0_local_pickup-107) и при его выборе весь 2 шаг исчезает, раньше работало, не понимаю в чем дело сейчас, они скрываются, но требуют заполнения
function awoohc_add_update_form_billing( $fragments ) { $checkout = WC()->checkout(); parse_str( $_POST['post_data'], $fields_values ); ob_start(); echo '<div class="woocommerce-billing-fields__field-wrapper">'; $fields = $checkout->get_checkout_fields( 'billing' ); foreach ( $fields as $key => $field ) { $value = $checkout->get_value( $key ); if ( isset( $field['country_field'], $fields[ $field['country_field'] ] ) ) { $field['country'] = $checkout->get_value( $field['country_field'] ); } if ( ! $value && ! empty( $fields_values[ $key ] ) ) { $value = $fields_values[ $key ]; } woocommerce_form_field( $key, $field, $value ); } echo '</div>'; $fragments['.woocommerce-billing-fields__field-wrapper'] = ob_get_clean(); return $fragments; } add_filter( 'woocommerce_update_order_review_fragments', 'awoohc_add_update_form_billing', 99 ); /** * Скрываем поля для бесплатного способа доставки * * @param $fields * * @return mixed * * @sourcecode https://wpruse.ru/woocommerce/hiding-fields-on-chosen-delivery/ * @author Artem Abramovich * @testedwith WC 5.5 */ function awoohc_override_checkout_fields( $fields ) { // получаем выбранные методы доставки. $chosen_methods = WC()->session->get( 'chosen_shipping_methods' ); // проверяем текущий метод и убираем не ненужные поля. if ( false !== strpos( $chosen_methods[0], 'free_shipping' ) ) { unset( $fields['billing']['billing_company'], $fields['billing']['billing_address_1'], $fields['billing']['billing_address_2'], $fields['billing']['billing_city'], $fields['billing']['billing_postcode'], $fields['billing']['billing_state'], $fields['billing']['billing_phone'], $fields['billing']['billing_email'] ); } return $fields; } add_filter( 'woocommerce_checkout_fields', 'awoohc_override_checkout_fields' ); /** * Прелоад при переключении доставки * * @sourcecode https://wpruse.ru/woocommerce/hiding-fields-on-chosen-delivery/ * @author Artem Abramovich * @testedwith WC 5.5 */ function awoohc_add_script_update_shipping_method() { if ( is_checkout() ) { ?> <!--Скроем поле Страна. Если успользуется поле Страна, то следцет убрать скрытие--> <style> #billing_country_field { display: none !important; } </style> <!--Выполняем обновление полей при переключении доставки--> <script> jQuery( document ).ready( function( $ ) { $( document.body ).on( 'updated_checkout updated_shipping_method', function( event, xhr, data ) { $( 'input[name^="shipping_method"]' ).on( 'change', function() { $( '.woocommerce-billing-fields__field-wrapper' ).block( { message: null, overlayCSS: { background: '#fff', 'z-index': 1000000, opacity: 0.3 } } ); } ); } ); } ); </script> <?php } } add_action( 'wp_footer', 'awoohc_add_script_update_shipping_method' );
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос