在WooCommerce中,我试图根据购物车项目数量计算不同的运费。
示例:
因此,第一项将设置5美元的成本,所有其他项目将为每个项目增加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)