Actualizare automată coș după modificarea cantității

26 iun. 2017, 10:43:53
Vizualizări: 34.9K
Voturi: 3

Încerc să actualizez automat coșul WooCommerce după ce cantitatea este modificată. Următorul cod din fișierul function.php funcționează, DAR actualizează coșul doar dacă modific cantitatea de două ori. Știți cum pot rezolva această problemă?

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
Toate răspunsurile la întrebare 3
1

Aproape un an mai târziu, dar această întrebare poate încă atrage vizitatori: Declanșezi click-ul, dar butonul nu are suficient timp să devină activ, motiv pentru care, până când dai click a doua oară, butonul devine activ. Elimină proprietatea "disabled" înainte de a declanșa click-ul:

    <script>
    jQuery('div.woocommerce').on('change', '.qty', function(){
        jQuery("[name='update_cart']").prop("disabled", false);
        jQuery("[name='update_cart']").trigger("click"); 
    });
    </script>
24 mai 2018 11:07:58
Comentarii

Exact ceea ce căutam. Tocmai am creat un gist pentru asta https://gist.github.com/kamaroly/0f1c6ec6c90a6c44dca3254317298278

Kamaro Kamaro
17 dec. 2018 10:14:30
0

Codul tău de mai sus funcționează destul de bine în sistemul meu local. Nu știu de ce nu funcționează în sistemul tău. Dar poți încerca să scrii codul JS în felul următor:

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;
}

Cred că este o abordare mai precisă și mai curată.

Sper că cele de mai sus te ajută.

26 iun. 2017 14:21:04
0

Am creat un plugin gratuit Ajax Cart AutoUpdate pentru a actualiza pagina coșului și totalurile mini coșului la modificarea cantității produsului. Are opțiuni suplimentare interesante, dar chiar și scriptul singur oferă suport mai larg pentru browsere și o experiență mult mai bună pentru utilizator.

Apelurile Ajax nu sunt trimise constant datorită întârzierii introduse pentru actualizare, în exemplul oferit este de 1000 de milisecunde, dar codul real al plugin-ului folosește valoarea specificată în setări. Funcționează astfel:

"Actualizarea coșului este întârziată cu numărul de milisecunde de la ultima acțiune care afectează cantitatea, specificată de utilizator în setări, implicit 1000. Înseamnă că actualizarea va fi declanșată doar o singură dată, când utilizatorul a terminat cu modificările."

De asemenea, pentru fanii vitezei de încărcare a paginii, amintiți-vă că dacă doriți să amânați jQuery, este mai bine să încărcați scripturile folosind wp_enqueue_script, cu dependența jQuery setată, deoarece un script inline cu jQuery va eșua în acest caz.

var timeout;

jQuery('div.woocommerce').on('change keyup mouseup', 'input.qty', function(){ // keyup și mouseup pentru suport Firefox
    if (timeout != undefined) clearTimeout(timeout); //anulează evenimentul programat anterior
    if (jQuery(this).val() == '') return; //cantitate goală, în loc să elimine articolul din coș, nu face nimic
    timeout = setTimeout(function() {
        jQuery('[name="update_cart"]').trigger('click');
    }, 1000 ); // programează evenimentul de actualizare coș cu o întârziere de 1000 de milisecunde
});
11 mai 2019 20:18:45