Как сделать проверку доставки по другому адресу при использовании бесплатной доставки и фиксированной ставки? - PullRequest
0 голосов
/ 07 мая 2020

как я могу установить флажок «Доставка на другой адрес», если выбрана бесплатная доставка или фиксированная ставка, и снять флажок, если выбрано самовывоз.

Все, что я вижу, это либо все 3 метода доставки проверены по умолчанию или нет.

Любой совет будет очень признателен.

Спасибо

1 Ответ

0 голосов
/ 07 мая 2020

Вот способ показать / скрыть поля доставки при оформлении заказа (автоматическая установка / снятие отметки флажок «доставка по другому адресу» в зависимости от выбранного способа доставки. При выборе этого способа доставки поля будут автоматически отображаться. Метод доставки - «Единая ставка» или «Бесплатная доставка», и поля доставки для других выбранных способов доставки будут скрыты:

// Auto Show hide checkout shipping fields based on chosen shipping methods
add_action( 'wp_footer', 'custom_checkout_field_script' );
function custom_checkout_field_script() {
    // Only on checkout page
    if( is_checkout() && ! is_wc_endpoint_url() ):

    // Get shipping methods rates data
    $rates = WC()->session->get('shipping_for_package_0')['rates'];
    $sdata  = []; // Initializing an empty array

    // Loop through shipping methods
    foreach( $rates as $rate ){
        // Targeting only "Flat rate" and "free shipping" shipping methods
        if ( in_array( $rate->method_id, ['flat_rate', 'free_shipping'] ) ) {
            // Add those shipping methods rate Ids in the array
            $sdata[] = $rate->id; 
        } 
    }

    // Jquery code start
    ?>
    <script>
        jQuery(function($){
            var a = 'input[name^="shipping_method"]',               b = a+':checked',
                c = 'input#ship-to-different-address-checkbox',
                d = <?php echo json_encode( $sdata ); ?>;

            // Conditional function that checks if the chosen shipping method enables "shipping fields"
            function rateIdEnableCheckbox( rateID, d ) {
                var e = false;

                // Loop through all available shipping methods Ids
                $.each( d, function( k, v ){
                    if( rateID == v ){
                        e = true;
                    }
                });

                return e;
            }

            // function that show or hide shipping address fields (checkbox)
            function showHideShippingAddressFields( b, c, d ) {
                var f = $(c).prop("checked") ? true : false,
                    g = rateIdEnableCheckbox( $(b).val(), d );

                if ( ( g && ! f ) || ( ! g && f ) ) {
                    $(c).click(); // Clik the checkbox (show hide shipping address)
                }
                // console.log($(b).val());
            }

            // 1. On load, the chosen shipping method
            setTimeout(function(){
                showHideShippingAddressFields( b, c, d );
            }, 100);

            // 2. On change shipping method (Live event)
            $( 'form.checkout' ).on( 'change', a, function() {
                showHideShippingAddressFields( b, c, d );
            });
        });
    </script>
    <?php
    endif;
}

Код входит в functions. php файл вашей активной дочерней темы (или активная тема) .Протестировано и работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...