2017-10-16 113 views
2

我正在寻找一种方法来根据购物车总价百分比,统一费率和每种产品的数量进行运费定制降价...Woocommerce根据购物车数量和商品数量减少运费成本


对于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€

这怎么办?

+0

这个插件在提供运输的折扣方面非常灵活。 https://codecanyon.net/item/woocommerce-dynamic-pricing-discounts/7119279 –

回答

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)进入运输区域设置并禁用一个“统一费率”(例如)和“保存”。然后重新启用“统一费率”和“保存”。 你完成了,你可以测试它。

+0

Merci Loic,c'est vraiment parfait ainsi! – Alain

相关问题