基于购物车商品数量的购物车折扣,仅针对非销售商品 [英] Cart discount based on cart item count and only for items that are not in sale

查看:54
本文介绍了基于购物车商品数量的购物车折扣,仅针对非销售商品的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在WooCommerce中,我想为那些不销售的产品提供10%的折扣.如果购物车中的商品数量为5个或更多且不销售,那么我给出10%的折扣.

In WooCommerce, I would like to give a discount of 10% specifically for those products that are not on sale. If cart item count is 5 or more items and not on sale, then I give a discount of 10%.

我使用以下代码根据此处的购物车数量限制来获得折扣:

I use the following code to get a discount based on cart item count restriction here:

add_action('woocommerce_cart_calculate_fees' , 'add_custom_fees');

/**
* Add custom fee if more than three article
* @param WC_Cart $cart
*/

function add_custom_fees( WC_Cart $cart ){
     if( $cart->cart_contents_count < 5 ){
         return;
     } 
    // Calculate the amount to reduce
    $discount = $cart->subtotal * 0.1;
    $cart->add_fee( '10% discount', -$discount);
} 

但是我不知道如何仅对非销售商品应用折扣.我该如何实现?

But I don't know how to apply the discount only for items that are not in sale. How can I achieve it?

谢谢.

推荐答案

这是一个自定义的挂钩函数,如果购物车中有5个或更多商品且没有产品,则该商品将应用于购物车的折扣特价中:

Here is a custom hooked function that will apply to cart a discount, if there is 5 or more items in cart and no products on sale:

add_action('woocommerce_cart_calculate_fees' , 'custom_discount', 10, 1);
function custom_discount( $cart ){

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

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

        // Initialising variable
        $is_on_sale = false;

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

            // If a cart item is on sale, $is_on_sale is true and we stop the loop
            if($product->is_on_sale()){
                $is_on_sale = true;
                break;
            }
        }

        ## Discount calculation ##
        $discount = $cart->subtotal * -0.1;

        ## Applied discount (no products on sale) ##
        if(!$is_on_sale )
            $cart->add_fee( '10% discount', $discount);

    endif;
}

此代码会出现在您活动的子主题(或主题)的function.php文件中,也可能会出现在任何插件文件中.

此代码已经过测试,可以正常工作.

This code is tested and works perfectly.

这篇关于基于购物车商品数量的购物车折扣,仅针对非销售商品的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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