简体   繁体   English

购物车中每个产品类别只允许一个产品

[英]Allow only one product per product category in cart

On this Question / Answer I have found the PHP code about how to just add one product per category in cart in Woocommerce. 在这个问题/答案中,我找到了有关如何仅在Woocommerce的购物车中为每个类别添加一个产品的PHP代码。

The code works just fine, but I want to add the latest added product to cart and if there is already a product of that category in the cart, I want to have the oldest deleted. 该代码可以正常工作,但是我想将最新添加的产品添加到购物车中,如果购物车中已经有该类别的产品,则希望删除最旧的产品。

add_filter( 'woocommerce_add_to_cart_validation', 'custom_checking_product_added_to_cart', 10, 3 );
function custom_checking_product_added_to_cart( $passed, $product_id, $quantity) {

// HERE Type your alert displayed message
// $message = __( 'BLA BLA YOUR MESSAGE.', 'woocommerce' );

$product_cats_object = get_the_terms( $product_id, 'product_cat' );
foreach($product_cats_object as $obj_prod_cat){
    $product_cats[] = $obj_prod_cat->slug;
}

foreach (WC()->cart->get_cart() as $cart_item ){
if( has_term( $product_cats, 'product_cat', $cart_item['product_id'] )) {
        $passed = false;
        wc_add_notice( $message, 'error' );
        break;
    }
}
return $passed;
}

It is a piece of code that comes from LoicTheAztec . 这是来自LoicTheAztec的一段代码。 It works fine but I need an extra option... 它工作正常,但我需要一个额外的选择...

In my Woocommerce there are 5 different categories, there is just place in the cart for one item per category. 在我的Woocommerce中,有5个不同的类别,每个类别中只有一个放置在购物车中。 The latest added item should stay, the item of the same category that is already in cart must be removed from cart. 最新添加的项目应保留,必须从购物车中删除购物车中已经存在的相同类别的项目。 Does someone of you has a solution? 你们中的某人有解决方案吗?

Many thanks! 非常感谢!

Here is your peace of code that will remove a cart item which product category match with the current product category. 这是您的安全代码,它将删除商品类别与当前商品类别匹配的购物车商品。

add_filter( 'woocommerce_add_to_cart_validation', 'custom_checking_product_added_to_cart', 10, 3 );
function custom_checking_product_added_to_cart( $passed, $product_id, $quantity) {

    // Getting the product categories slugs in an array for the current product
    $product_cats_object = get_the_terms( $product_id, 'product_cat' );
    foreach($product_cats_object as $obj_prod_cat)
        $product_cats[] = $obj_prod_cat->slug;

    // Iterating through each cart item
    foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item ){

        // When the product category of the current product match with a cart item
        if( has_term( $product_cats, 'product_cat', $cart_item['product_id'] ))
        {
            // Removing the cart item
            WC()->cart->remove_cart_item($cart_item_key);

            // Displaying a message
            wc_add_notice( 'Only one product from a category is allowed in cart', 'notice' );

            // We stop the loop
            break;
        }
    }
    return $passed;
}

This code goes in function.php file of your active child theme (or theme) or also in any plugin file. 这段代码会出现在您活动的子主题(或主题)的function.php文件中,也可能会出现在任何插件文件中。

This code is tested and works for WooCommerce version 2.6+ and 3.0+ 此代码已经过测试,可用于WooCommerce 2.6+和3.0+版本

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM