Обновление способа доставки в зависимости от заполнения полей в WooCommerce

У меня в интернет-магазине существуют два стандартных способа доставки Flat Rate и Free Delivery. Я добавил плагин для доставки по расстоянию.

Таким образом, когда клиент при оформлении заказа заполняет поля "Город" и "Адрес", должны добавляться новые способы доставки. Но новых доставок не видно, пока не выберешь Flat Rate или Free Delivery.

Как я понимаю, у меня нет автоматического обновления способов доставки в зависимости от заполнения полей.

Далее, я использовал такой код:

add_action('wp_footer', 'woocommerce_custom_update_checkout', 50);
function woocommerce_custom_update_checkout() {
    if (is_checkout()) {
    ?>
    <script type="text/javascript">
        jQuery( document ).ready(function( $ ) {            
            $('#billing_address_1').click(function(){
                jQuery('body').trigger('update_checkout', { update_shipping_method: true });
            });

        });
    </script>
    <?php
    }
}

Но пока я не нажму на заполненное поле второй раз, способ доставки не обновляется.

Можно ли подключить к этому коду AJAX, чтобы результат был виден сразу, дабы не нажимать на заполненное поле дважды?


Ответы (2 шт):

Автор решения: darkvortek

Можно попробовать заменить click на .focusout

→ Ссылка
Автор решения: Darth KYL

вы можете попробовать вот этот вариант, просто добавив класс к враперу через который woocommerce будет отслеживать изменение в поле

add_filter( 'woocommerce_checkout_fields' , 'trigger_update_checkout_on_change' );

function trigger_update_checkout_on_change( $fields ) {
    $fields['billing']['billing_address_1']['class'][] = 'update_totals_on_change';

    return $fields;
}

или же изменить ивент с click на change

add_action('wp_footer', 'woocommerce_custom_update_checkout', 50);
function woocommerce_custom_update_checkout() {
    if (is_checkout()) {
    ?>
    <script type="text/javascript">
        jQuery( document ).ready(function( $ ) {            
            $('#billing_address_1').change(function(){
                jQuery('body').trigger('update_checkout', { update_shipping_method: true });
            });

        });
    </script>
    <?php
    }
}
→ Ссылка