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
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
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?
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.
Hola,
Muchas gracias! Ahora si me funciona!