Carrito de actualización automática al hacer clic en WooCommerce

1 minuto de lectura

Avatar de usuario de Krystian
krystian

Quiero actualizar automáticamente el carrito cuando se cambia la cantidad. Tengo este código de trabajo en functions.php, pero solo funciona para el primer clic. ¿Cómo ajustarlo para que funcione con cada clic?

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

Avatar de usuario de Reigel Gallarde
Reigel Gallarde

intentalo asi..

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

Es porque el html está siendo reemplazado, el evento de clic div.woocommerce ya no está allí… si lo adjuntaste al cuerpo, podría funcionar…

  • desafortunadamente el mismo problema, pero gracias por decir por qué sucede esto

    – Kristian

    8 de agosto de 2017 a las 5:55

  • He probado el código y está funcionando en mi extremo. ¿Tienes un enlace que podamos comprobar? o ver la consola del navegador si hay un error al hacer clic

    –Reigel Gallarde

    8 de agosto de 2017 a las 6:15

  • Estoy probando un sitio web provisional (protegido por pw). Pero puedes ver el problema en ergotopia.de. El problema es que solo cada segundo clic activa la actualización automática. La función era: add_action( ‘wp_footer’, ‘cart_update_qty_script’ ); function cart_update_qty_script() { if (is_cart()) : ?>

    – Kristian

    8 de agosto de 2017 a las 6:46


  • @KrystianManthey sí, tienes razón. El evento adecuado es change no click. Tengo un código de actualización con una versión que funciona para mí en noviembre de 2019.

    – Jasom Dotnet

    4 de noviembre de 2019 a las 5:11

  • En mi caso, solo cada segundo cambio activó el clic de Actualizar. Es porque una vez que el carrito se recarga con Ajax, el botón de actualización se ‘deshabilita’ y el clic no tiene efecto, hasta que cambie la cantidad nuevamente. Lo arreglé reemplazando la línea de activación con esto: jQuery( "[name='update_cart']" ).prop('disabled', false).trigger( "click" );

    – Kristián Filo

    23 de septiembre de 2020 a las 14:50

La razón por la que esto sucede es porque tu dom se actualiza con el Ajax y los eventos se descargan.

Lo que debe hacer es escuchar el evento ‘updated_cart_totals’ que le indicará que dom está actualizado y luego reactivará a sus oyentes.

function quantity_upd() {
  $(".woocommerce-cart-form").on("change", ".qty", function() {
    $("[name="update_cart"]").removeAttr('disabled');
    $("[name="update_cart"]").trigger("click");
  });
}

$( document ).on( 'updated_cart_totals', function() {
  quantity_upd();
}

Ajústelo para su tema y HTML, puede variar

Avatar de usuario de Amy
amy

La razón por la que solo funciona con el primer clic es porque cada vez que actualiza el formulario, se actualiza solo. Así que en lugar de hacer:

jQuery('div.woocommerce').on('click', '.quantity .button', function() {

tienes que cambiar div.woocommerce a document:

jQuery('document').on('click', '.quantity .button', function() {

Avatar de usuario de Jalpa
jalpa

Puede usar el complemento como se muestra a continuación.

https://wordpress.org/plugins/woo-update-cart-on-quantity-change/

También este complemento está funcionando para usted.

https://wordpress.org/plugins/woocommerce-ajax-cart/

Utilice el complemento para su lado seguro porque el complemento funciona en todas las versiones de wordpress y woocommerce.

O

Puede probar el código personalizado con modificaciones menores 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">
            jQuery(document).on("click", "div.woocommerce .quantity .button", function(e) {
               jQuery("[name="update_cart"]").trigger("click"); 
            });

OR  
            jQuery("body").on("click", "div.woocommerce .quantity .button", function(e) {
                jQuery("[name="update_cart"]").trigger("click"); 
            });
        </script>
        <?php
    endif;
}

Como no conozco su estructura HTML, construí un jQuery de muestra que funciona en el tema de la tienda.

Aquí hay un código de muestra.

add_action( 'wp_footer', 'cart_update_qty_script' );
function cart_update_qty_script() {
    if (is_cart()) :
    ?>
    <script>
        jQuery('div.woocommerce').on('keyup', '.quantity .qty', function(){
            //console.log('clicked');
            jQuery("[name="update_cart"]").trigger("click"); });
    </script>
    <?php
    endif;
}

  • tal vez sea porque tenemos el woocommerce, wordpress, etc. más nuevo. Con este código, nada se actualiza. Pero gracias por intentar ayudar!

    – Kristian

    8 de agosto de 2017 a las 7:09

  • He probado en Woo Version 3.1.1 y WP Version 4.8.1. ¿Puedes compartir la URL de tu sitio web?

    – Raunak Gupta

    8 de agosto de 2017 a las 7:14


  • Estoy probando un sitio web provisional (protegido por pw). Pero puedes ver un problema similar en ergotopia.de. El problema es que solo cada segundo clic activa la actualización automática. La función era: add_action( ‘wp_footer’, ‘cart_update_qty_script’ ); function cart_update_qty_script() { if (is_cart()) : ?>

    – Kristian

    8 de agosto de 2017 a las 7:33

Avatar de usuario de Brandon N
Brandon N.

En lugar de intentar activar el clic, ¿qué tal quitar el atributo “deshabilitado” del botón Actualizar carrito para que el usuario pueda hacer clic en él? La página del carrito ya funciona de esta manera cuando se cambia la cantidad de un artículo, se puede hacer clic en el botón Actualizar carrito.

add_action( 'wp_footer', 'cart_update_qty_script' ); 
function cart_update_qty_script() { 
    if (is_cart()) : 
    ?> 
    <script> 
        jQuery('body').on('click', 'div.woocommerce .quantity .button', function(){ 
            jQuery("[name="update_cart"]").prop("disabled", false);
        }); 
    </script> 
    <?php 
    endif; 
}

  • tal vez sea porque tenemos el woocommerce, wordpress, etc. más nuevo. Con este código, nada se actualiza. Pero gracias por intentar ayudar!

    – Kristian

    8 de agosto de 2017 a las 7:09

  • He probado en Woo Version 3.1.1 y WP Version 4.8.1. ¿Puedes compartir la URL de tu sitio web?

    – Raunak Gupta

    8 de agosto de 2017 a las 7:14


  • Estoy probando un sitio web provisional (protegido por pw). Pero puedes ver un problema similar en ergotopia.de. El problema es que solo cada segundo clic activa la actualización automática. La función era: add_action( ‘wp_footer’, ‘cart_update_qty_script’ ); function cart_update_qty_script() { if (is_cart()) : ?>

    – Kristian

    8 de agosto de 2017 a las 7:33

Avatar de usuario de Farboud Farhoudi
Farboud Farhoudi

El botón de actualización en realidad está deshabilitado cuando se carga la página, por lo que básicamente debe habilitarlo, justo antes de activar el evento de clic.

Usa este código:

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"]").removeAttr('disabled');
           jQuery("[name="update_cart"]").trigger("click"); 
        });
   </script>
<?php
endif;
}

¿Ha sido útil esta solución?