求助修正WooCommerce运费计算代码:单品运费×数量异常
问题分析
你的代码问题出在循环购物车商品时,每次都基于已经修改过的运费成本再去乘数量。比如购物车有2个商品,第一个商品处理后运费变成了「原始运费×数量1」,第二个商品又用这个已经变大的运费去乘数量2,最终总运费就成了「原始运费×数量1×数量2」,自然会翻倍甚至更多。
修正后的代码
// Modify shipping cost based on quantity for each item add_filter('woocommerce_package_rates', 'modify_shipping_cost_based_on_quantity', 10, 2); function modify_shipping_cost_based_on_quantity($rates, $package) { foreach ($rates as $rate_key => $rate) { // 先保存当前运费方式的原始单件成本 $original_cost = $rate->cost; $total_shipping = 0; // 遍历每个商品,累加每个商品的运费(单件成本×数量) foreach ($package['contents'] as $item) { $quantity = $item['quantity']; $total_shipping += $original_cost * $quantity; } // 更新运费成本和格式化后的显示价格 $rates[$rate_key]->cost = $total_shipping; $rates[$rate_key]->formatted_cost = wc_price($rates[$rate_key]->cost); } return $rates; }
修正说明
- 先把每个运费方式的原始单件运费成本存起来,避免后续修改后影响计算
- 遍历购物车商品时,用原始成本乘以每个商品的数量,累加得到总运费
- 最后直接把总运费赋值给当前运费方式,确保计算逻辑正确
内容的提问来源于stack exchange,提问作者Radvis
相关产品推荐
相关产品推荐

