Avisos
Vaciar todo

Limitar productos en el carrito

5 Respuestas
3 Usuarios
0 Reactions
25 Visitas
Respuestas: 558
Honorable Member
Topic starter
 

Hola,
Necesito limitar el carrito para que solo me puedan comprar 5 productos, no más.
He instalado el plugin "WooCommerce Advanced Product Quantities" y limitado a 5, pero son para un único producto, también he instalado "WooCommerce Max Quantity" pero lo pongo a 5 y no limita nada.

¿Como lo puedo hacer?

URL del sitio: Contenido solo visible a usuarios registrados


 
Respondido : 23/12/2019 11:52 am
Pepe
 Pepe
Respuestas: 41129
Illustrious Member Admin
 

Hola Carlos.

Lo que se podría hacer es restringir por categorías, es decir que el cliente solo pueda comprar cuatro productos de cada categoría o de las categorías que tu le indiques.

Añade lo siguiente al archivo functions.php que encontrarás dentro dela carpeta de tu plantilla:

// Permite sólo cuatro producto (o un número predefinido de productos) por categoría en el carrito
add_filter( 'woocommerce_add_to_cart_validation', 'we_cantidad_permitida_por_categoria_en_carrito', 10, 2 );
function we_cantidad_permitida_por_categoria_en_carrito( $passed, $product_id) {
 
    $max_num_products = 4;// cambia el número máximo de productos permitidos por categoría
    $running_qty = 0;
 
    $restricted_product_cats = array();
 
    //Restringe a categoría o categorías particulares por slug
    $restricted_product_cats[] = 'accessories';
    //$restricted_product_cats[] = 'cat-slug-two';// descomenta para activar la restricción en una segunda categoría
 
    // Obtiene el slug de la categoría de producto actual en un array
    $product_cats_object = get_the_terms( $product_id, 'product_cat' );
    foreach($product_cats_object as $obj_prod_cat) $current_product_cats[]=$obj_prod_cat->slug;
 
 
    // Itera a través de cada artículo del carrito
    foreach (WC()->cart->get_cart() as $cart_item_key=>$cart_item ){
 
        // Restringe el $max_num_products de cada categoría
        if( has_term( $current_product_cats, 'product_cat', $cart_item['product_id'] )) {
 
        // Restringe el $max_num_products de categorías con productos restringidos
        //if( array_intersect($restricted_product_cats, $current_product_cats) && has_term( $restricted_product_cats, 'product_cat', $cart_item['product_id'] )) {
 
            // count(selected category) quantity
            $running_qty += (int) $cart_item['quantity'];
 
            // No se permiten más de los productos permitidos en el carrito
            if( $running_qty >= $max_num_products ) {
                wc_add_notice( sprintf( 'Sólo está permitido %s '.($max_num_products>1?'productos de esta categoría':'producto de esta categoría').' en el carrito.',  $max_num_products ), 'error' );
                $passed = false; // no agrega el nuevo producto al carrito
                // Para el loop
                break;
            }
 
        }
    }
    return $passed;
}

Te explico el codigo:

Con la variable " $max_num_products = 4; " le indicamos que solo se pueden añadir 4 productos, este valor lo puedes modificar añadiendo o disminuyendo la cantidad de productos que quieres que se añadan.

Con la variable " $restricted_product_cats[] = 'accessories'; " le indico las categorías a las que quiero restringir la venta, en este caso sería a la categoría "Accesorios " con el valor " accessories " este valor es el Slug de la categoría que podemos encontrar editando la categoría:

Para añadir más categorías al código solo tienes que ir añadiendo líneas por cada categia que quieras restingir:

$restricted_product_cats[] = 'accessories';
$restricted_product_cats[] = 'tshirts';

Una cosa que puedes probar es que todas pertenezcan a uan categoria padre y restingir esa categoria padre.

Un saludo


 
Respondido : 23/12/2019 4:34 pm
Respuestas: 558
Honorable Member
Topic starter
 

Hola,
No sé si me he explicado bien, yo quiero limitar a 5 productos en el carrito me da igual de la categoría que sea, si son de la misma o si son diferentes, ¿esto que me envias no me sirve?


 
Respondido : 23/12/2019 4:43 pm
Jhon
 Jhon
Respuestas: 44989
Illustrious Member Moderator
 

Hola

Haciendo unas modificaciones te puede servir, por ejemplo prueba con este código modificado que no tiene en cuenta la categoría, sino que te comprueba la cantidad total

add_filter( 'woocommerce_add_to_cart_validation', 'we_cantidad_permitida_en_carrito', 10, 2 );
function we_cantidad_permitida_en_carrito( $passed, $product_id) {
 
    $max_num_products = 4;// cambia el número máximo de productos permitidos por categoría
    $running_qty = 0;
 
    // Itera a través de cada artículo del carrito
    foreach (WC()->cart->get_cart() as $cart_item_key=>$cart_item ){
 
            // count(selected category) quantity
            $running_qty += (int) $cart_item['quantity'];
 
            // No se permiten más de los productos permitidos en el carrito
            if( $running_qty >= $max_num_products ) {
                wc_add_notice( sprintf( 'Sólo está permitido %s '.($max_num_products>1?'productos ':'producto').' en el carrito.',  $max_num_products ), 'error' );
                $passed = false; // no agrega el nuevo producto al carrito
                break;
            }
    }
    return $passed;
}

Adicionalmente, puedes ocultar el botón de actualizar el carrito por CSS ya que el código anterior sólo te valida cuando se añade al carrito directamente desde el producto, revisa:
Contenido solo visible a usuarios registrados

Saludos.


 
Respondido : 23/12/2019 5:49 pm
Respuestas: 558
Honorable Member
Topic starter
 

Hola,
Muchas gracias! Ahora si me funciona!


 
Respondido : 26/12/2019 9:54 am