Автоматическое обновление корзины после изменения количества

26 июн. 2017 г., 10:43:53
Просмотры: 34.9K
Голосов: 3

Я пытаюсь автоматически обновлять корзину WooCommerce после изменения количества товаров. Следующий код в файле function.php работает, НО обновляет корзину только после двойного изменения количества. Знаете, как это исправить?

add_action( 'wp_footer', 'cart_update_qty_script' );
function cart_update_qty_script() {
    if (is_cart()) :
    ?>
    <script>
        jQuery('div.woocommerce').on('change', '.qty', function(){
            jQuery("[name='update_cart']").trigger("click"); 
        });
    </script>
    <?php
    endif;
}
0
Все ответы на вопрос 3
1

Почти с годишно закъснение, но този въпрос все още може да привлича посетители: Вие задействате клика, но бутонът няма достатъчно време да стане активен, затова когато кликнете втори път, бутонът вече е активиран. Премахнете свойството "disabled" преди да задействате клика:

    <script>
    jQuery('div.woocommerce').on('change', '.qty', function(){
        jQuery("[name='update_cart']").prop("disabled", false);
        jQuery("[name='update_cart']").trigger("click"); 
    });
    </script>
24 мая 2018 г. 11:07:58
Комментарии

Именно то, что я искал. Только что создал gist для этого https://gist.github.com/kamaroly/0f1c6ec6c90a6c44dca3254317298278

Kamaro Kamaro
17 дек. 2018 г. 10:14:30
0

Ваш код выше отлично работает в моей локальной системе. Не знаю, почему он не работает у вас. Но вы можете попробовать написать JS код следующим образом:

add_action( 'wp_footer', 'cart_update_qty_script' );
function cart_update_qty_script() {
    if (is_cart()) :
        ?>
        <script type="text/javascript">
            (function($){
                $(function(){
                    $('div.woocommerce').on( 'change', '.qty', function(){
                        $("[name='update_cart']").trigger('click');
                    });
                });
            })(jQuery);
        </script>
        <?php
    endif;
}

Это более точный и чистый подход, на мой взгляд.

Надеюсь, это поможет.

26 июн. 2017 г. 14:21:04
0

Я создал бесплатный плагин Ajax Cart AutoUpdate для обновления страницы корзины и мини-корзины при изменении количества товаров. Он имеет дополнительные удобные опции, но даже сам скрипт обеспечивает более широкую поддержку браузеров и значительно лучший пользовательский опыт.

Ajax-запросы не отправляются постоянно благодаря введенной задержке обновления. В предоставленном примере она составляет 1000 миллисекунд, но в реальном коде плагина используется значение, указанное в настройках. Это работает следующим образом:

"Обновление корзины задерживается на количество миллисекунд, прошедших с последнего действия, влияющего на количество товаров, указанное пользователем в настройках (по умолчанию 1000). Это означает, что обновление произойдет только один раз, когда пользователь завершит внесение изменений."

Также для фанатов скорости загрузки страниц: если вы хотите отложить загрузку jQuery, лучше загружать скрипты с помощью wp_enqueue_script, указав jQuery в качестве зависимости, потому что встроенный скрипт с jQuery в таком случае не сработает.

var timeout;

jQuery('div.woocommerce').on('change keyup mouseup', 'input.qty', function(){ // keyup и mouseup для поддержки Firefox
    if (timeout != undefined) clearTimeout(timeout); // отменить ранее запланированное событие
    if (jQuery(this).val() == '') return; // если количество пустое, вместо удаления товара из корзины ничего не делать
    timeout = setTimeout(function() {
        jQuery('[name="update_cart"]').trigger('click');
    }, 1000 ); // запланировать обновление корзины с задержкой в 1000 миллисекунд
});
11 мая 2019 г. 20:18:45