Aggiornamento automatico del carrello dopo la modifica della quantità
Sto cercando di aggiornare automaticamente il carrello di WooCommerce dopo che la quantità viene modificata. Il seguente codice nel file function.php funziona, MA aggiorna il carrello solo se cambio la quantità due volte. Sapete come risolvere questo problema?
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;
}

Con quasi un anno di ritardo, ma questa domanda potrebbe ancora ricevere visitatori: Attivi il click, ma il pulsante non ha abbastanza tempo per diventare abilitato, ecco perché quando clicchi la seconda volta il pulsante risulta abilitato. Rimuovi la proprietà "disabled" prima di attivare il click:
<script>
jQuery('div.woocommerce').on('change', '.qty', function(){
jQuery("[name='update_cart']").prop("disabled", false);
jQuery("[name='update_cart']").trigger("click");
});
</script>

Esattamente quello che stavo cercando. Ho appena creato una gist per questo https://gist.github.com/kamaroly/0f1c6ec6c90a6c44dca3254317298278

Il tuo codice sopra funziona molto bene nel mio sistema locale. Non so perché non funzioni nel tuo sistema. Ma puoi provare a scrivere il codice JS come segue-
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;
}
È un approccio più preciso e pulito secondo me.
Spero che quanto sopra possa esserti d'aiuto.

Ho creato un plugin gratuito Ajax Cart AutoUpdate per aggiornare la pagina del carrello e i totali del mini-carrello quando cambia la quantità del prodotto. Ha delle utili opzioni aggiuntive, ma anche lo script da solo offre un supporto più ampio ai browser e un'esperienza utente molto migliore.
Le chiamate Ajax non vengono inviate continuamente grazie al ritardo di aggiornamento introdotto, nell'esempio fornito è di 1000 millisecondi, ma il codice effettivo del plugin utilizza il valore specificato nelle impostazioni. Funziona così:
"L'aggiornamento del carrello viene ritardato di un numero di millisecondi dall'ultima azione che ha modificato la quantità, specificato dall'utente nelle impostazioni (predefinito 1000). Significa che l'aggiornamento verrà attivato solo una volta, quando l'utente ha finito di apportare modifiche."
Inoltre, per i fanatici della velocità della pagina, ricordate che se volete differire jQuery, è meglio caricare gli script usando wp_enqueue_script, con la dipendenza da jQuery impostata, perché uno script inline con jQuery fallirebbe in tal caso.
var timeout;
jQuery('div.woocommerce').on('change keyup mouseup', 'input.qty', function(){ // keyup e mouseup per supporto a Firefox
if (timeout != undefined) clearTimeout(timeout); //annulla l'evento precedentemente programmato
if (jQuery(this).val() == '') return; //quantità vuota, invece di rimuovere l'articolo dal carrello, non fare nulla
timeout = setTimeout(function() {
jQuery('[name="update_cart"]').trigger('click');
}, 1000 ); // programma l'evento di aggiornamento carrello con un ritardo di 1000 millisecondi
});
