【问题标题】:Discount based on cart items count and product categories基于购物车商品数量和产品类别的折扣
【发布时间】:2017-09-27 14:38:06
【问题描述】:

我正在尝试根据最少的购物车商品数量和类别添加自定义购物车折扣。
我已经从这个答案中获取了代码:
Cart discount based on cart item count and only for items that are not in sale

我对其进行了一些更改,这是我的代码:

add_action('woocommerce_cart_calculate_fees' , 'my_custom_discount', 10, 1);
function my_custom_discount( $cart_object ){

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

        // Only when there is 4 or more items in cart
        if( $cart_object->get_cart_contents_count() >= 4):

        // Defining variables
            $categories = array('mycategory1','mycategory2');
            $has_category = false;

        // Iterating through each item in cart
        foreach( $cart_object->get_cart() as $cart_item ){
            // Getting an instance of the product object
            $_product = new WC_Product( $cart_item['product_id'] );

            // If a cart item has the category
            if(has_category($category, $_product)){
                $has_category = true;
                break;
            }
       }

       ## Discount calculation ##
       $discount = $cart_object->subtotal * -0.03;

       ## Applied discount (no products on sale) ##
       if($has_category )
           $cart_object->add_fee( '3% discount', $discount);

    endif;
}

我不能让它工作。

我做错了什么以及如何使它起作用?

谢谢

【问题讨论】:

    标签: php wordpress woocommerce cart categories


    【解决方案1】:

    由于产品类别是自定义分类法'product_cat',您需要通过这种方式使用has_term() 条件函数(而不是has_category()):

    add_action('woocommerce_cart_calculate_fees' , 'my_custom_discount', 10, 1);
    function my_custom_discount( $cart_obj ){
    
        if ( is_admin() && ! defined( 'DOING_AJAX' ) )
            return;
    
        // Only when there is 4 or more items in cart
        if ( $cart_obj->get_cart_contents_count() > 3):
    
            // Set HERE your array of categories (slugs, IDs or names) <==  <==  <==  <==  <==
            $categories = array('mycategory1','mycategory2');
    
            // Initialising variable
            $has_category = false;
    
    
            // Iterating through each item in cart
            foreach( $cart_obj->get_cart() as $cart_item ){
                // The product ID
                $product_id = $cart_item['product_id'];
    
                // When a cart item is from one defined product categories we set $has_category to true.
                if ( has_term( $categories, 'product_cat', $product_id ) ) {
                    $has_category = true;
                    break;
                }
            }
    
            ## Discount calculation ##
            $discount = $cart_obj->subtotal * -0.03;
    
            ## Applied discount (for products (items) of defined product categories) ##
            if( $has_category )
                $cart_obj->add_fee( '3% discount', $discount);
    
        endif;
    }
    

    此代码位于您的活动子主题(或主题)的 function.php 文件中或任何插件文件中。

    此代码经过测试,适用于 WooCommerce 版本 2.6+ 和 3.0+

    【讨论】:

    • 像魅力一样工作。谢谢你。 @LoicTheAztec
    猜你喜欢
    • 1970-01-01
    • 2017-06-05
    • 2019-01-31
    • 2019-02-06
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    相关资源
    最近更新 更多