Carrinho web soma de 1 em 1 sem mudar quantidade

  • Autor Autor adrianac
  • Data de início Data de início
Tradução em andamento: em alguns minutos este tópico estará em português. Por enquanto, o conteúdo está no original em espanhol. Ver original
A

adrianac

Curioso
Usuário com poucas negociações! Use sempre o saldo do 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:

Inserir CODE, HTML ou 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:

Inserir CODE, HTML ou 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
 
Foi útil? Participe da conversa

Com sua conta grátis você pode responder, mandar mensagem privada ao autor e comprar com Saldo retido: o pagamento é liberado quando você recebe o combinado.

Leva 30 segundos · você volta a este tópico ao terminar
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:

Inserir CODE, HTML ou 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:

Inserir CODE, HTML ou 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:

Inserir CODE, HTML ou 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!
 
Voltar
Topo