基于购物车数量和项目数量的Woocommerce有条件运输成本降低

时间:2017-10-16 22:53:33

标签: php wordpress woocommerce cart shipping

我正在寻找一种方法来根据购物车总百分比,固定费率和每种产品的数量来定制降低运费......

6件商品:平均运费20欧元

  • 总购物车是120€|运费=固定费用 - 购物车总费用的10% 20 - 12 = 8€
  • 总购物车是180€|运费=固定费用 - 购物车总费用的10% 20 - 18 = 2€
  • 总购物车是220€|运费=固定费用 - 购物车总费用的10% 20 - 22 = 0€

适用于12种产品:固定运费30€

  • 总购物车是120€|运费=固定费用 - 购物车总费用的10% 30 - 12 = 18€
  • 总购物车是180€|运费=固定费用 - 购物车总费用的10% 30 - 18 = 12€
  • 总购物车是220€|运费=固定费用 - 购物车总费用的10% 30 - 22 = 8€

如何做到这一点?

1 个答案:

答案 0 :(得分:0)

这可以在没有插件的情况下完成......

1)您需要首先在每个送货区域的WooCommerce送货设置中为“统一费率”方法设置 1 的数量:

enter image description here

此金额将在我们的功能中更改为20€从1到11项,30€为12项及更多项。这笔金额将减少10%的购物车总金额。

2)然后使用挂在woocommerce_package_rates过滤器挂钩中的自定义功能,您可以根据购物车项目数和购物车总数对运费进行折扣。

以下是代码:

add_filter( 'woocommerce_package_rates', 'custom_package_rates', 10, 2 );
function custom_package_rates( $rates, $packages ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;

    // Get some cart data and set variable values
    $cart_count = WC()->cart->get_cart_contents_count();
    $cart_total =  WC()->cart->cart_contents_total;
    $cart_10_percent = $cart_total * 0.1;
    $flat_rate_value = 20; // Default "Flat rate" value

    foreach($rates as $rate_key => $rate_values ) {
        $method_id = $rate_values->method_id;
        $rate_id = $rate_values->id;

        if( $method_id == 'flat_rate' ){
            if( $cart_count < 6 )
                $cart_10_percent = 0; // No percent discount
            elseif( $cart_count >= 12 )
                $flat_rate_value = 30; // "Flat rate" value for 12 or more items

            $rate_cost = $flat_rate_value > $cart_10_percent ? $flat_rate_value - $cart_10_percent : 0;

            // Set the new calculated rate cost
            $rates[$rate_id]->cost = number_format( $rates[$rate_id]->cost * $rate_cost, 2 );

            // Taxes rate cost (if enabled)
            $taxes = array();
            foreach ($rates[$rate_id]->taxes as $key => $tax){
                if( $tax > 0 ){ // set the new tax cost
                    // set the discounted tax cost
                    $taxes[$key] = number_format( $tax * $rate_cost, 2 );
                }
            }
            $rates[$rate_id]->taxes = $taxes;
        }
    }
    return $rates;
} 

代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。

在WooCommerce 3上测试并正常工作。

  

刷新送货缓存(有时需要)
  1)首先清空你的购物车。
  2)此代码已保存在function.php文件中。
  3)进入送货区设置并禁用一个“统一费率”(例如)和“保存”。然后重新启用“统一费率”和“保存”。 您已完成,可以对其进行测试。