dourang20110122 2018-08-20 21:30
浏览 85
已采纳

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

I am trying to Disable shopping if a an item from a specific product category is in cart (which is a subscription in form of product with tabs - checkout and shipping are stripped off). When that product is added to cart, no other products should be allowed to be add up.

I have tried those threads code:

But didn't helped.

How can I disable shopping if a specific product category is in cart on Woocommerce?

output problem image

  • 写回答

1条回答 默认 最新

  • doucuyu2259 2018-08-21 05:10
    关注

    October 2018 - Improved updated code version:
    Disable other product categories for a cart item from specific category in Woocommerce

    Try the following code, that will:

    1. Avoid add to cart when a product from a specific product category is in cart
    2. Remove other cart items when a product from a specific product category is added to cart

    The code:

    // 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;
    }
    

    Code goes in function.php file of your active child theme (or active theme). Tested and works.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀