Soporte » Plugins y Hacks » WooCommerce » Botón vaciar carrito

  • Resuelto charlie0412

    (@charlie0412)


    Ante todo un saludo para todos los colegas del foro, necesito ayuda con algo que de seguro ya habrán escuchado antes, se trata de añadir un botón en el carrito que permita vaciar el mismo, sé que existen plugins y snippets para esto pero en mi caso no quisiera usar plugins, en cuanto a los códigos que he visto permiten vaciar el carrito fácilmente pero sin pedir ninguna confirmación por parte del cliente lo cual no creo que sea correcto, buscando en la red encontré el siguiente código que funciona perfectamente en algunas plantillas pidiendo confirmación tal y como deseo, sin embargo en la plantilla(woodmart) que estoy usando sin importar si le doy aceptar o cancelar pues vacía el carrito de cualquier manera, por favor ayúdenme.

    add_action( 'init', 'woocommerce_clear_cart_url' );
    function woocommerce_clear_cart_url() {
        global $woocommerce;
        if ( isset( $_GET['empty-cart'] ) && $_GET['empty-cart'] == 'yes' ) {
            $woocommerce->cart->empty_cart();
        }
    }
    
    add_action( 'woocommerce_before_cart_table', 'woocommerce_empty_cart_button' );
    function woocommerce_empty_cart_button() {
        global $woocommerce;
        $cart_url = $woocommerce->cart->get_cart_url();
        echo '<a href="'.$cart_url.'?empty-cart=yes" class="button empty_cart" title="' . esc_attr( 'Vaciar Carrito', 'woocommerce' ) . '">' . esc_html( 'Vaciar Carrito', 'woocommerce' ) . '</a>';
    }
    
    function custom_scripts(){
        ?>
        <script type="text/javascript">
            (function($){
                $(document).ready(function(){
                    $(document).on('click','.empty_cart',function(e){
                        e.preventDefault();
                        if(confirm('Estás seguro que deseas vaciar el carrito?')){
                            var url = $(this).attr('href');
                            window.location = url;
                        }
                    });
                });
            })(jQuery);
        </script>
        <?php
    }
    
    add_action( 'wp_footer', 'custom_scripts', 10, 1 );
    
Viendo 10 respuestas - de la 1 a la 10 (de un total de 10)
  • Hola, @charlie0412:

    Lamentamos no haber respondido antes. Por alguna razón, tu mensaje no apareció en los debates sin respuesta, que son a los que le damos prioridad, así que pasó desapercibido… hasta ahora. Voy a comentarlo a los moderadores para intentar entender por qué sucedió esto.

    Mientras tanto, aunque es muy probable que hayas resuelto por tu cuenta a estas alturas, te dejo una revisión del código que dejaste arriba, que debería funcionar tanto en la barra lateral como en la página de detalles del carrito:

    /**
     * WooCommerce + WoodMart:
     * Añade un botón para vaciar el carrito desde la barra lateral y en la página de detalles del carrito
     */ 
    add_action( 'init', 'woocommerce_clear_cart_url' );
    function woocommerce_clear_cart_url() {
        global $woocommerce;
        if ( isset( $_GET['empty-cart'] ) && $_GET['empty-cart'] == 'yes' ) {
            $woocommerce->cart->empty_cart();
        }
    }
    add_action( 'woocommerce_cart_coupon', 'woocommerce_empty_cart_button' );
    add_action( 'woocommerce_widget_shopping_cart_buttons', 'woocommerce_empty_cart_button' );
    function woocommerce_empty_cart_button() {
        $cart_url = wc_get_cart_url();
        echo '<a href="'.$cart_url.'?empty-cart=yes" class="button empty_cart" title="' . esc_attr( 'Vaciar Carrito', 'woocommerce' ) . '">' . esc_html( 'Vaciar Carrito', 'woocommerce' ) . '</a>';
    }
    add_action( 'wp_footer', 'custom_scripts', 10, 1 );
    function custom_scripts(){
        ?>
        <script type="text/javascript">
        (function($){
            $(document).ready(function(){
                $(document).on('click','.empty_cart',function(e){
                    e.preventDefault();
                    if(confirm('¿Estás seguro de que deseas vaciar el carrito?')){
                        var url = $(this).attr('href');
                        window.location = url;
                    }
                });
            });
        })(jQuery);
        </script>
        <?php
    }
    Iniciador del debate charlie0412

    (@charlie0412)

    Hola @yordansoares:

    Agradecido de su respuesta, sin importar que haya transcurrido algún tiempo, le comento que le había dado solución al problema con el uso de un plugin, aún así continúo con el deseo de no usar plugins en la medida de lo posible. He probado el código que amablemente me ha enviado pero desafortunadamente sigue con el mismo comportamiento que describí al principio, es decir, sin importar si acepto o cancelo , el carrito se vacía de cualquier manera, vuelvo a recordar que sólo me ocurre con la plantilla Woodmart, en las otras que he probado funciona perfectamente.

    Yordan Soares

    (@yordansoares)

    ¿Podrías decirme qué versión de WoodMart estás utilizando?

    Iniciador del debate charlie0412

    (@charlie0412)

    La versión 6.5.4

    Es probable que ese sea el problema: La última versión es la 7.4.3.

    Casualmente, un cliente tiene este tema, así que probé en un sitio de ensayo y a mí me funcionó bien con la última versión, así que creo que al actualizar el tema, se debería resolver el problema.

    Por cierto, ten en cuenta que, aunque coincidió el caso de que conozco el tema y tengo acceso a él, normalmente, no brindamos ayuda con problemas relacionados con temas o plugins de pago.

    Iniciador del debate charlie0412

    (@charlie0412)

    Entiendo, intentaré actualizando el tema, muchas gracias

    que plugin me pueden sugerir para hacer esto?

    Hola, @yssr:

    En realidad, nunca he necesitado aplicar este comportamiento en una tienda, por eso no podría recomendarte un plugin en específico, pero podrías probar el código que compartí arriba.

    @yordansoares me puedes indicar donde debo poner el código que compartiste. Lo mío es un woocommerce.

    Iniciador del debate charlie0412

    (@charlie0412)

    Saludos @yssr:

    Con el plugin Woocommerce Cart Items Bulk Deletion puedes insertar fácilmente un botón en la página del carrito para vaciar el mismo, también puedes usar el código proporcionado por @yordansoares, que va en el archivo functions.php de tu tema, este archivo puedes localizarlo en la administración de WordPress en Apariencia–>Editor de archivos de temas, lo recomendable es aplicar el código en el functions.php de un tema hijo para que no pierdas los cambios si el tema se actualiza, en la siguiente URL hay un artículo muy bien explicado sobre los temas hijos.

Viendo 10 respuestas - de la 1 a la 10 (de un total de 10)
  • Debes estar registrado para responder a este debate.