Avisos
Vaciar todo

Hosting WordPress 70% dto Dominios promo

Limitar productos en el carrito  

 
Carlos
 Carlos
Honorable Member

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

Citar
Respondido : 23/12/2019 11:52 am
Pepe
 Pepe
Soporte CMS Webempresa 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

ResponderCitar
Respondido : 23/12/2019 4:34 pm

optimiza-automaticamente-todas-las-imagenes-de-tu-wordpress

Carlos
 Carlos
Honorable Member

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?

ResponderCitar
Respondido : 23/12/2019 4:43 pm
Jhon
 Jhon
Soporte CMS Webempresa 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.

ResponderCitar
Respondido : 23/12/2019 5:49 pm

wpdoctor-revisa-la-salud-de-tu-wordpress

Carlos
 Carlos
Honorable Member

Hola,
Muchas gracias! Ahora si me funciona!

ResponderCitar
Respondido : 26/12/2019 9:54 am