Carrito web suma de 1 en 1 sin cambiar cantidad

  • Autor Autor adrianac
  • Fecha de inicio Fecha de inicio
A

adrianac

Curioso
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Buenos días,

Tengo un problema en mi web y es que el carrito no suma correctamente. Solo me añade de 1 en 1 por más que cambie la cantidad del input. Esto son los 2 codigos que tengo:

Insertar CODE, HTML o PHP:
add_filter( 'woocommerce_loop_add_to_cart_link', 'quantity_inputs_for_loop_ajax_add_to_cart', 10, 2 );
function quantity_inputs_for_loop_ajax_add_to_cart( $html, $product ) {
    if ( $product && $product->is_type( 'simple' ) && $product->is_purchasable() && $product->is_in_stock() && ! $product->is_sold_individually() ) {
        // Get the necessary classes
        $class = implode( ' ', array_filter( array(
            'button',
            'product_type_' . $product->get_type(),
            $product->is_purchasable() && $product->is_in_stock() ? 'add_to_cart_button' : '',
            $product->supports( 'ajax_add_to_cart' ) ? 'ajax_add_to_cart' : '',
        ) ) );

        // Adding embeding <form> tag and the quantity field
        $html = sprintf( '%s%s<a rel="nofollow" href="%s" data-quantity="%s" data-product_id="%s" data-product_sku="%s" class="%s">%s</a>%s',
            '<form class="cart">',
            woocommerce_quantity_input( array(), $product, false ),
            esc_url( $product->add_to_cart_url() ),
            esc_attr( isset( $quantity ) ? $quantity : 1 ),
            esc_attr( $product->get_id() ),
            esc_attr( $product->get_sku() ),
            esc_attr( isset( $class ) ? $class : 'button' ),
            esc_html( $product->add_to_cart_text() ),
            '</form>'
        );
    }
    return $html;
}

add_action( 'wp_footer' , 'archives_quantity_fields_script' );
function archives_quantity_fields_script(){
    if( is_shop() || is_product_category() || is_product_tag() ): ?>
    <script type='text/javascript'>
        jQuery(function($){
            // Update quantity on 'a.button' in 'data-quantity' attribute (for ajax)
            $('form.cart').on('change', 'input.qty', function() {
                if ($(this).val() === '0') 
                    $(this).val('1');
                $(this).closest('form.cart').find( 'a.add_to_cart_button').attr('data-quantity', $(this).val());
            });
        });
    </script>
    <?php endif;
}

Y este:

Insertar CODE, HTML o PHP:
add_filter( 'woocommerce_product_add_to_cart_text', 'woo_archive_custom_cart_button_text', 10, 2 );
 
 
function quantity_inputs_for_woocommerce_loop_add_to_cart_link( $html, $product ) {
if ( $product && $product->is_type( 'simple' ) && $product->is_purchasable() && $product->is_in_stock() && ! $product->is_sold_individually() ) {
$html = '<form action="' . esc_url( $product->add_to_cart_url() ) . '" class="cart" method="post" enctype="multipart/form-data">';
$html .= woocommerce_quantity_input( array(), $product, false );
$html .= '<button type="submit" class="button alt">' . esc_html( $product->add_to_cart_text() ) . '</button>';
$html .= '</form>';
}
return $html;
}

Llevo dias buscando sin encontrar el problema. :grumpy:

Gracias de antemano.

Pagina con la que necesito ayuda:

Mordazas para taladro MOT - Einatall
 
Buenos días,

Tengo un problema en mi web y es que el carrito no suma correctamente. Solo me añade de 1 en 1 por más que cambie la cantidad del input. Esto son los 2 codigos que tengo:

Insertar CODE, HTML o PHP:
add_filter( 'woocommerce_loop_add_to_cart_link', 'quantity_inputs_for_loop_ajax_add_to_cart', 10, 2 );
function quantity_inputs_for_loop_ajax_add_to_cart( $html, $product ) {
    if ( $product && $product->is_type( 'simple' ) && $product->is_purchasable() && $product->is_in_stock() && ! $product->is_sold_individually() ) {
        // Get the necessary classes
        $class = implode( ' ', array_filter( array(
            'button',
            'product_type_' . $product->get_type(),
            $product->is_purchasable() && $product->is_in_stock() ? 'add_to_cart_button' : '',
            $product->supports( 'ajax_add_to_cart' ) ? 'ajax_add_to_cart' : '',
        ) ) );

        // Adding embeding <form> tag and the quantity field
        $html = sprintf( '%s%s<a rel="nofollow" href="%s" data-quantity="%s" data-product_id="%s" data-product_sku="%s" class="%s">%s</a>%s',
            '<form class="cart">',
            woocommerce_quantity_input( array(), $product, false ),
            esc_url( $product->add_to_cart_url() ),
            esc_attr( isset( $quantity ) ? $quantity : 1 ),
            esc_attr( $product->get_id() ),
            esc_attr( $product->get_sku() ),
            esc_attr( isset( $class ) ? $class : 'button' ),
            esc_html( $product->add_to_cart_text() ),
            '</form>'
        );
    }
    return $html;
}

add_action( 'wp_footer' , 'archives_quantity_fields_script' );
function archives_quantity_fields_script(){
    if( is_shop() || is_product_category() || is_product_tag() ): ?>
    <script type='text/javascript'>
        jQuery(function($){
            // Update quantity on 'a.button' in 'data-quantity' attribute (for ajax)
            $('form.cart').on('change', 'input.qty', function() {
                if ($(this).val() === '0')
                    $(this).val('1');
                $(this).closest('form.cart').find( 'a.add_to_cart_button').attr('data-quantity', $(this).val());
            });
        });
    </script>
    <?php endif;
}

Y este:

Insertar CODE, HTML o PHP:
add_filter( 'woocommerce_product_add_to_cart_text', 'woo_archive_custom_cart_button_text', 10, 2 );
 
 
function quantity_inputs_for_woocommerce_loop_add_to_cart_link( $html, $product ) {
if ( $product && $product->is_type( 'simple' ) && $product->is_purchasable() && $product->is_in_stock() && ! $product->is_sold_individually() ) {
$html = '<form action="' . esc_url( $product->add_to_cart_url() ) . '" class="cart" method="post" enctype="multipart/form-data">';
$html .= woocommerce_quantity_input( array(), $product, false );
$html .= '<button type="submit" class="button alt">' . esc_html( $product->add_to_cart_text() ) . '</button>';
$html .= '</form>';
}
return $html;
}

Llevo dias buscando sin encontrar el problema. :grumpy:

Gracias de antemano.

Pagina con la que necesito ayuda:

Mordazas para taladro MOT - Einatall
Hola adrianac,

Entiendo tu frustración con el problema del carrito de compras. Al observar tu código, parece que el comportamiento del carrito para sumar las cantidades no se está manejando correctamente en la parte de JS que actualiza el data-quantity. Aquí hay algunas formas de abordar el problema:

1. Verifica el Evento de Cambio: Asegúrate de que el evento change realmente se activa en el campo de cantidad. Puedes agregar un console.log dentro de la función para verificar esto.

2. Ajustar la Lógica del Script: En tu script de JavaScript, asegúrate de que el campo input.qty se esté actualizando correctamente. Aquí tienes un pequeño ajuste que puedes hacer:

Insertar CODE, HTML o PHP:
javascript
   $('form.cart').on('change', 'input.qty', function() {
       var quantity = $(this).val();
       if (quantity === '' || quantity <= 0) {
           quantity = 1; // por defecto a 1 si es cero o vacío
           $(this).val(quantity);
       }
       $(this).closest('form.cart').find('a.add_to_cart_button').attr('data-quantity', quantity);
   });

3. Verifica el Envío del Formulario: Asegúrate de que la cantidad seleccionada se envíe al servidor. Cuando se hace clic en el botón de añadir al carrito, confirma que el valor de input.qty se utiliza adecuadamente.

4. Revisar Dependencias de WooCommerce: Si hay plugins que puedan estar interfiriendo con los scripts de WooCommerce o del carrito, considera desactivarlos temporalmente para ver si el problema persiste.

5. Depuración de AJAX: Si estás utilizando AJAX para agregar productos al carrito (lo que parece que estás haciendo), asegúrate de que la llamada AJAX esté enviando correctamente el valor de cantidad. Puedes usar herramientas como el inspector de red en tu navegador para ver la solicitud.

6. Plugin de Caché: Si usas un plugin de caché, intenta purgar la caché, ya que algunas veces puede estar sirviendo archivos obsoletos.

Espero que alguna de estas sugerencias te ayude a resolver el problema. Si sigues teniendo dificultades, no dudes en proporcionar más detalles o errores específicos que aparezcan en la consola. ¡Buena suerte!
 
Atrás
Arriba