Actualización automática del carrito después de cambiar la cantidad

26 jun 2017, 10:43:53
Vistas: 34.9K
Votos: 3

Estoy tratando de actualizar automáticamente el carrito de WooCommerce después de que se cambia la cantidad. El siguiente código dentro del function.php funciona, PERO actualiza el carrito solo si cambio la cantidad dos veces. ¿Sabes cómo arreglar eso?

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
Todas las respuestas a la pregunta 3
1

Casi un año tarde, pero esta pregunta aún puede recibir visitantes: Disparas el clic, pero el botón no tiene suficiente tiempo para habilitarse, por eso cuando haces clic por segunda vez el botón ya está habilitado. Elimina la propiedad "disabled" antes de disparar el clic:

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

Exactamente lo que estaba buscando. Acabo de crear un gist para esto https://gist.github.com/kamaroly/0f1c6ec6c90a6c44dca3254317298278

Kamaro Kamaro
17 dic 2018 10:14:30
0

Tu código anterior funciona bastante bien en mi sistema local. No sé por qué no funciona en tu sistema. Pero puedes intentar escribir el código JS como se muestra a continuación:

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

Es un enfoque más preciso y más limpio, en mi opinión.

Espero que lo anterior te sea de ayuda.

26 jun 2017 14:21:04
0

Creé un plugin gratuito Ajax Cart AutoUpdate para actualizar la página del carrito y los totales del mini carrito al cambiar la cantidad del producto. Tiene opciones adicionales interesantes, pero incluso el script solo proporciona un mayor soporte para navegadores y una mejor experiencia de usuario.

Las llamadas Ajax no se envían constantemente debido al retraso de actualización introducido, en el ejemplo proporcionado es de 1000 milisegundos, pero el código real del plugin utiliza el valor especificado en los ajustes. Funciona así:

"La actualización del carrito se retrasa por la cantidad en milisegundos desde la última acción que afecta la cantidad, especificada por el usuario en los ajustes, por defecto 1000. Esto significa que la actualización se disparará solo una vez, cuando el usuario haya terminado con los cambios."

También, para los fanáticos de la velocidad de la página, recuerden que si desean diferir jQuery, es mejor cargar los scripts usando wp_enqueue_script, con la dependencia de jQuery establecida, porque un script en línea con jQuery fallará en ese caso.

var timeout;

jQuery('div.woocommerce').on('change keyup mouseup', 'input.qty', function(){ // keyup y mouseup para soporte en Firefox
    if (timeout != undefined) clearTimeout(timeout); //cancelar evento programado previamente
    if (jQuery(this).val() == '') return; //cantidad vacía, en lugar de eliminar el artículo del carrito, no hacer nada
    timeout = setTimeout(function() {
        jQuery('[name="update_cart"]').trigger('click');
    }, 1000 ); // programar evento de actualización del carrito con un retraso de 1000 milisegundos
});
11 may 2019 20:18:45