根据 Woocommerce 购物车重量应用累进折扣

Apply a progressive discount based on Woocommerce cart weight

我正在寻找一种根据购物车总重量应用折扣(百分比)的方法。 示例:

当其中一个规则被应用时,应该会有一条消息也像图片中显示的这个付款折扣。 Payment method discount

如果可能的话,还会显示像 'added to cart message box' 这样的消息框,它会显示客户必须订购多少才能获得第二个折扣规则中的第一个,例如:多订购 **kg 并获得 5% 的折扣。

我不知道如何做到这一点,所以很遗憾我没有尝试任何东西。 提前致谢。

此致, 瓦斯科

欢迎使用 Whosebug!

    $applied_discount = 0;

    add_filter( 'woocommerce_calculated_total', 'add_conditional_discount_by_weight', 10, 2 );
    function add_conditional_discount_by_weight( $total, $cart ) {
        
        global $applied_discount;
        
        $total_weight = WC()->cart->get_cart_contents_weight(); // gets cart weight
        
        if($total_weight >= 10 || $total_weight <= 25){
            
            $applied_discount = 5;
            return $total*(1-($applied_discount/100));
            
        }
    }
    
    add_action( 'woocommerce_cart_totals_after_order_total', 'display_applied_discount' );
    function display_applied_discount() {
        
        global $applied_discount;
        
        if($applied_discount > 0){
            $discount = WC()->cart->total * ($applied_discount/100);
        ?>
        <tr class="order-total">
            <th><?php esc_html_e( "Applied Discount ($applied_discount%)", 'woocommerce' ); ?></th>
            <td><?php echo "$".$discount ?></td>
        </tr>
        <?php
        }
    }

这是回答您问题的代码片段。我只添加了一个重量条件。其他的条件相信你自己会填的。

可以将代码段添加到您的 functions.php(只要它是 child theme, otherwise your code will be deleted after a theme update!) or as a code snippet using plugins such as Code Snippets

您可以使用负费用根据购物车重量进行累进折扣,如下所示:

add_action( 'woocommerce_cart_calculate_fees', 'shipping_weight_discount', 30, 1 );
function shipping_weight_discount( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    $cart_weight   = $cart->get_cart_contents_weight();
    $cart_subtotal = $cart->get_subtotal(); // Or $cart->subtotal;
    $percentage    = 0;

    if ( $cart_weight >= 10 && $cart_weight <= 25 ) {
        $percentage = 5;
    } elseif ( $cart_weight > 25 && $cart_weight <= 50 ) {
        $percentage = 7.5;
    } elseif ( $cart_weight > 50 && $cart_weight <= 100 ) {
        $percentage = 10;
    } elseif ( $cart_weight > 100 && $cart_weight <= 150 ) {
        $percentage = 12.5;
    } elseif ( $cart_weight > 150 ) {
        $percentage = 15;
    }

    // Apply a calculated discount based on weight
    if( $percentage > 0 ) {
        $discount = $cart_subtotal * $percentage / 100;
        $cart->add_fee( sprintf( __( 'Weight %s discount', 'woocommerce' ), $percentage.'%'), -$discount );
    }
}

代码进入您的活动子主题(或活动主题)的 function.php 文件。

基于: