@MegaPuxapb

Как в woocommerce отключить валидацию полей при самовывозе?

Есть форма в оформлении заказа, все поля обязательны к заполнению. Как отключить валидацию некоторых полей при самовывозе?
66f6080059e13266624173.png
  • Вопрос задан
  • 32 просмотра
Решения вопроса 1
vasmor
@vasmor
Интересуюсь
Приведенный ниже код отключит валидацию указанных полей и скроет их при выборе способа доставки Самовывоз.

add_filter( 'woocommerce_checkout_fields', 'hide_local_pickup_method', 999 );
function hide_local_pickup_method( $fields_pickup ) {

    $shipping_method_pickup = 'local_pickup:2'; // это значение поля самовывоза необходимо уточнить через исходный код в браузере

	// для полей из группы 'billing'
    // в следующей строке в массив внести идентификаторы полей, валидацию которых нужно отключить
    $hide_billing_fields_pickup = array( 'billing_city', 'billing_state', 'billing_address_1', 'billing_address_2', 'billing_address_3', 'billing_porch', 'billing_floor' );
 
    $chosen_methods_pickup = WC()->session->get( 'chosen_shipping_methods' );
    $chosen_shipping_pickup = $chosen_methods_pickup[0];
 
    foreach( $hide_billing_fields_pickup as $field_pickup ) {
        if ( $chosen_shipping_pickup == $shipping_method_pickup ) {
            $fields_pickup['billing'][$field_pickup]['required'] = false;
            $fields_pickup['billing'][$field_pickup]['class'][] = 'hide_pickup';
        }
        $fields_pickup['billing'][$field_pickup]['class'][] = 'conditional-visibility-field';
    }

	// для полей из группы 'shipping'
    // в следующей строке в массив внести идентификаторы полей, валидацию которых нужно отключить
    $hide_shipping_fields_pickup = array( 'shipping_city', 'shipping_state', 'shipping_address_1', 'shipping_address_2', 'shipping_address_3', 'shipping_porch', 'shipping_floor' );

    foreach( $hide_shipping_fields_pickup as $field_pickup ) {
        if ( $chosen_shipping_pickup == $shipping_method_pickup ) {
            $fields_pickup['shipping'][$field_pickup]['required'] = false;
            $fields_pickup['shipping'][$field_pickup]['class'][] = 'hide_pickup';
        }
        $fields_pickup['shipping'][$field_pickup]['class'][] = 'conditional-visibility-field';
    }

	// для полей из группы 'order'
    // в следующей строке в массив внести идентификаторы полей, валидацию которых нужно отключить
	$hide_order_fields_pickup = array( 'additional_time_from', 'additional_time_to', 'additional_date' );
	
	foreach( $hide_order_fields_pickup as $field_pickup ) {
        if ( $chosen_shipping_pickup == $shipping_method_pickup ) {
            $fields_pickup['order'][$field_pickup]['required'] = false;
            $fields_pickup['order'][$field_pickup]['class'][] = 'hide_pickup';
        }
        $fields_pickup['order'][$field_pickup]['class'][] = 'conditional-visibility-field';
    }

    return $fields_pickup;
}

add_action( 'wp_footer', 'local_pickup_fields', 999 );
function local_pickup_fields() {
    if ( is_checkout() ) {
		?>
		<style>
			.hide_pickup {display: none!important;}
		</style>
		<script>
			jQuery( function( $ ) {
				if ( typeof woocommerce_params === 'undefined' ) {
					return false;
				}
				$(document).on( 'change', '#shipping_method input[type="radio"]', function() {
					// local_pickup:2 - это значение поля самовывоза необходимо уточнить через исходный код в браузере
					$('.conditional-visibility-field').toggleClass('hide_pickup', this.value == 'local_pickup:2');
				});
			});
		</script>
		<?php
	}
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы