WooCommerce不同配送等级运费计算异常问题排查修复求助
问题根源
你的代码存在4个核心错误导致运费计算不符合预期:
- 遍历购物车商品的逻辑错误:循环内匹配到第一个非大件商品直接
break终止遍历,匹配到大件商品处理完直接return,无法统计全部大件商品的总数量 - 未叠加普通商品固定运费:直接修改统一运费的成本,没有保留普通商品每单50美元的基础运费
- 大件运费基数错误:你的配置中大件阶梯运费的基础值应为150美元/2件,但原有逻辑错误将基础运费和大件运费合并后乘以阶梯系数,导致每次多算50美元基础费用
$taxes变量未初始化,无税费配置时会抛出PHP警告
修复后代码
add_filter( 'woocommerce_package_rates', 'different_rates_based_on_quantity_steps', 10, 2 ); function different_rates_based_on_quantity_steps ( $rates, $package ){ $slug_class_shipping = 'test'; // 大件商品配送分类别名 $step_change = 2; // 大件阶梯计数单位 $bulk_base_cost = 150; // 每单位阶梯大件运费 $normal_base_cost = 50; // 普通商品固定运费 $bulk_count = 0; $has_normal = false; // 遍历所有购物车商品统计数量 foreach( WC()->cart->get_cart() as $cart_item ){ if( $cart_item['data']->get_shipping_class() == $slug_class_shipping ){ $bulk_count += $cart_item['quantity']; } else { $has_normal = true; } } // 计算总运费 $total_shipping = $has_normal ? $normal_base_cost : 0; if( $bulk_count > 0 ){ $rate_operand = ceil( $bulk_count / $step_change ); $total_shipping += $rate_operand * $bulk_base_cost; } // 更新运费配置 foreach ( $rates as $rate_key => $rate ){ if( 'flat_rate' === $rate->method_id ) { $has_taxes = false; $taxes = []; // 初始化税费变量 // 更新运费成本 $rates[$rate_key]->cost = $total_shipping; // 处理税费 foreach ($rates[$rate_key]->taxes as $key => $tax){ if( $tax > 0 ){ $tax_percent = $tax / $rate->cost; $taxes[$key] = $total_shipping * $tax_percent; $has_taxes = true; } } if( $has_taxes ){ $rates[$rate_key]->taxes = $taxes; } } } return $rates; }
生效说明
代码更新后需要清空WooCommerce购物车缓存,或者在后台 WooCommerce > 状态 > 工具 页面清除购物车会话后再测试计算结果。
内容的提问来源于stack exchange,提问作者user1809790
相关产品推荐
相关产品推荐

