tengo 2 categorías con los nombres de “Categoría 1” y “Categoría 2”
- evitando la adición simultánea al carrito de 2 categorías, “Categoría 1” y “Categoría 2”
- solo se puede agregar 1 producto de la “Categoría 2” al carrito
evitando la adición simultánea al carrito de 2 categorías, “Categoría 1” y “Categoría 2”
Usé este código para esto, pero cuando quiere mostrar el mensaje, también muestra el mensaje de la condición 2, es decir, interfiere con la condición 2, eso significa:
mensaje: no puede tener más de 1 artículos en el carrito
mensaje: Solo se permite un artículo de las categorías “%s”…
add_filter( 'woocommerce_add_to_cart_validation', 'limit_cart_items_from_category', 10, 3 );
function limit_cart_items_from_category ( $passed, $product_id, $quantity )
{
// Accept when cart is empty
if( WC()->cart->is_empty() ) return $passed;
// HERE your product categories in this array (can be names, slugs or Ids)
$categories = array('Category 1', 'Category 2');
$found = $current = false;
// Check the current product
if( has_term( $categories, 'product_cat', $product_id ) ){
$current = true;
}
// Loop through cart items checking for product categories
foreach ( WC()->cart->get_cart() as $cart_item ){
if( has_term( $categories, 'product_cat', $cart_item['product_id'] ) ) {
$found = true;
break; // stop the loop.
}
}
// Current product and a cart item match with defined product categories
if( $found && $current ){
$passed = false;
$cats_str = implode('" and "', $categories );
wc_add_notice( sprintf( __('Only one item is allowed from "%s" categories…', 'woocommerce' ), $cats_str ), 'error' );
}
return $passed;
}
solo se puede agregar 1 producto de la “Categoría 2” al carrito
Usé este código para esto y funciona bien:
// Checking and validating when products are added to cart
add_filter( 'woocommerce_add_to_cart_validation', 'only_one_items_allowed_add_to_cart', 10, 3 );
function only_one_items_allowed_add_to_cart( $passed, $product_id, $quantity ) {
$cart_items_count = WC()->cart->get_cart_contents_count();
$total_count = $cart_items_count + $quantity;
$Category_2 = has_term( 'Category 2', 'product_cat', $cart_item['product_id'] );
$in_cart = WC()->cart->find_product_in_cart( WC()->cart->generate_cart_id( $product_id ) );
if( $Category_2 && $cart_items_count >= 1 || $total_count > 1 && ! $in_cart ){
// Set to false
$passed = false;
// Display a message
wc_add_notice( __( "You can’t have more than 1 items in cart", "woocommerce" ), "error" );
}
return $passed;
}
.