如何为其他商品添加不同的运费

时间:2017-11-16 21:37:02

标签: php wordpress woocommerce cart shipping

在WooCommerce中,我试图根据购物车项目数量计算不同的运费。

示例:

  • 1项$ 5
  • 2项$ 5 + $ 2
  • 3项$ 5 +(2 x 2 $)... 依此类推 ......

因此,第一项将设置5美元的成本,所有其他项目将为每个项目增加2美元。

这可能吗?

2 个答案:

答案 0 :(得分:1)

已更新 - 两个步骤:

1)添加此代码,根据购物车项目数(物品总数)计算运费计算成本

add_filter( 'woocommerce_package_rates', 'progressive_flat_rate_cost_calculation', 10, 2 );
function progressive_flat_rate_cost_calculation( $rates, $package )
{
    // The cart count (total items in cart)
    $cart_count = WC()->cart->get_cart_contents_count();
    $taxes = array();

    $cost = 5; // Cost for the 1st item
    $other = 2; // Cost for additional items

    // Calculation
    if( $cart_count > 1 )
        $cost += ($cart_count - 1) * $other;

    // Iterating through each shipping rate
    foreach($rates as $rate_key => $rate_values){
        $method_id = $rate_values->method_id;
        $rate_id = $rate_values->id;
        // Targeting "Flat Rate" shipping method
        if ( 'flat_rate' === $method_id ) {
            // Set the new calculated rate cost
            $rates[$rate_id]->cost = number_format($rates[$rate_id]->cost * $cost, 2);
            // Taxes rate cost (if enabled)
            foreach ($rates[$rate_id]->taxes as $key => $tax){
                if( $rates[$rate_id]->taxes[$key] > 0 ){ // set the new tax cost
                    $taxes[$key] = number_format( $rates[$rate_id]->taxes[$key] * $cost, 2 );
                    $has_taxes = true;
                } else {
                    $has_taxes = false;
                }
            }
            if( $has_taxes )
                $rates[$rate_id]->taxes = $taxes;
        }
    }
    return $rates;
}

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

2)现在,在一般送货设置中,您需要为每个送货区域设置"统一费率" 送货方式,费用将设置为 1 (在您的WooCommerce发货设置中)。

  

有时您需要刷新送货区域缓存(在每个区域的woocommerce送货设置中):
禁用每个固定费率,然后保存,然后启用此固定费率并保存。
  最好开始使用全新的购物车(在测试之前将其清空)

此代码在WooCommerce 3+上测试并正常工作

答案 1 :(得分:1)

可以通过仅设置统一费率来完成......不需要代码。

只需启用统一费率运费......

在成本中写下这条规则---

5 + 2 *([数量] - 1)