Woocommerce - 防止将两个不同类别的商品添加到购物车 [英] Woocommerce - Prevent Adding items from two different categories to cart

查看:21
本文介绍了Woocommerce - 防止将两个不同类别的商品添加到购物车的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想防止用户一次将不同类别的产品添加到购物车中.假设用户导航到另一个类别并尝试将产品添加到购物车,他们会先清除购物车.请有人知道我如何处理这个吗?我是这样的新手.谢谢

I want to prevent users from adding products from different categories into cart at once. Say if the user navigates to another categories and tries to add product to cart, they get the cart cleared out first. Please anybody know how i might approach this? I am a newbie at things like this. Thanks

推荐答案

我以前解决过这个问题.我的文章在这里.

I've solved this before. My write-up is here.

它与您的请求略有不同,因为当他们尝试添加第二个类别时,它不会清除购物车,而是将原始商品保留在购物车中并显示警告.

It differs slightly from your request in that instead of clearing the cart when they try to add a second category it keeps the original item in the cart and displays a warning.

为了后代:

<?php

// Enforce single parent category items in cart at a time based on first item in cart
function get_product_top_level_category ( $product_id ) {

    $product_terms            =  get_the_terms ( $product_id, 'product_cat' );
    $product_category_term    =  $product_terms[0];
    $product_category_parent  =  $product_terms[0]->parent;

    while ( $product_category_parent  !=  0 ) {
            $product_category_term    =  get_term($product_category_parent, 'product_cat' );
            $product_category_parent  =  $product_category_term->parent;
    }

    return $product_category_term;

}

add_filter ( 'woocommerce_before_cart', 'restrict_cart_to_single_category' );
function restrict_cart_to_single_category() {
        global $woocommerce;
        $cart_contents    =  $woocommerce->cart->get_cart( );
        $cart_item_keys   =  array_keys ( $cart_contents );
        $cart_item_count  =  count ( $cart_item_keys );

        // Do nothing if the cart is empty
        // Do nothing if the cart only has one item
        if ( ! $cart_contents || $cart_item_count == 1 ) {
                return null;
        }

        // Multiple Items in cart
        $first_item                    =  $cart_item_keys[0];
        $first_item_id                 =  $cart_contents[$first_item]['product_id'];
        $first_item_top_category       =  get_product_top_level_category ( $first_item_id );
        $first_item_top_category_term  =  get_term ( $first_item_top_category, 'product_cat' );
        $first_item_top_category_name  =  $first_item_top_category_term->name;

        // Now we check each subsequent items top-level parent category
        foreach ( $cart_item_keys as $key ) {
                if ( $key  ==  $first_item ) {
                        continue;
                }
                else {
                        $product_id            =  $cart_contents[$key]['product_id'];
                        $product_top_category  =  get_product_top_level_category( $product_id );

                        if ( $product_top_category  !=  $first_item_top_category ) {
                                $woocommerce->cart->set_quantity ( $key, 0, true );
                                $mismatched_categories  =  1;
                        }
                }
        }

        // we really only want to display this message once for anyone, including those that have carts already prefilled
        if ( isset ( $mismatched_categories ) ) {
                echo '<p class="woocommerce-error">Only one category allowed in cart at a time.<br />You are currently allowed only <strong>'.$first_item_top_category_name.'</strong> items in your cart.<br />To order a different category empty your cart first.</p>';
        }
}
?>

这篇关于Woocommerce - 防止将两个不同类别的商品添加到购物车的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆