当来自特定产品类别的商品在 Woocommerce 中的购物车中时禁用购物

Disable shopping when an item from a specific product category is in cart in Woocommerce

如果来自特定产品类别的商品在购物车中(这是带有标签的产品形式的订阅 - 结帐和运输被剥离),我正在尝试禁用购物。当将该产品添加到购物车时,不应允许添加其他产品。

我试过那些线程代码:

但没有帮助。

如果特定产品类别在 Woocommerce 上的购物车中,我如何禁止购物?

October 2018 - Improved updated code version:

试试下面的代码,它将:

  1. 当购物车中有特定产品类别的产品时,避免添加到购物车
  2. 将特定产品类别中的产品添加到购物车时删除其他购物车商品

代码:

// Remove other items when our specific product is added to cart
add_action( 'woocommerce_add_to_cart', 'remove_other_products_on_add_to_cart', 10, 6 );
function remove_other_products_on_add_to_cart ( $cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data ){
    // HERE set your product category (can be term IDs, slugs or names)
    $category = 'posters';

    // We remove other items when our specific product is added to cart
    if( has_term( $category, 'product_cat', $product_id ) ) {
        foreach( WC()->cart->get_cart() as $item_key => $cart_item ){
            if( ! has_term( $category, 'product_cat', $cart_item['product_id'] ) ) {
                WC()->cart->remove_cart_item( $item_key );
            }
        }
    }
}

// Avoid other items to be added to cart when our specific product is in cart
add_filter( 'woocommerce_add_to_cart_validation', 'check_and_limit_cart_items', 10, 3 );
function check_and_limit_cart_items ( $passed, $product_id, $quantity ){
    // HERE set your product category (can be term IDs, slugs or names)
    $category = 'posters';

    // We exit if the cart is empty
    if( WC()->cart->is_empty() )
        return $passed;

    // CHECK CART ITEMS: search for items from product category
    foreach ( WC()->cart->get_cart() as $cart_item ){
        if( has_term( $category, 'product_cat', $cart_item['product_id'] ) ) {
            // Display an warning message
            wc_add_notice( __('A subscription is already in cart (Other items are not allowed in cart).', 'woocommerce' ), 'error' );
            // Avoid add to cart
            return false;
        }
    }
    return $passed;
}

代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。