请求帮助:按类型及运费升序排序WooCommerce配送选项
请求帮助:按类型及运费升序排序WooCommerce配送选项
Hey,我之前刚好折腾过类似的需求,给你分享个能实现的代码方案,你可以把这段代码加到主题的functions.php文件里,或者用自定义代码插件来添加(推荐后者,避免主题更新丢失代码):
add_filter( 'woocommerce_package_rates', 'custom_sort_shipping_methods', 10, 2 ); function custom_sort_shipping_methods( $rates, $package ) { // 初始化不同类型的配送方法数组 $free_shipping = array(); $flat_rate = array(); $paid_shipping = array(); $local_pickup = array(); foreach ( $rates as $rate_id => $rate ) { // 分类不同类型的配送方式 switch( $rate->method_id ) { case 'free_shipping': $free_shipping[ $rate_id ] = $rate; break; case 'flat_rate': $flat_rate[ $rate_id ] = $rate; break; case 'local_pickup': $local_pickup[ $rate_id ] = $rate; break; default: $paid_shipping[ $rate_id ] = $rate; break; } } // 对付费配送方式按运费升序排序 usort( $paid_shipping, function( $a, $b ) { return $a->cost > $b->cost ? 1 : -1; }); // 合并所有数组,按你想要的顺序排列 return array_merge( $free_shipping, $flat_rate, $paid_shipping, $local_pickup ); }
简单说下这段代码的逻辑:
- 先把所有配送选项按类型分到不同的数组里:免费配送、平邮、本地自提,剩下的都归到付费配送组
- 然后对付费配送组按照运费成本从小到大排序
- 最后把这些数组按你要的顺序合并起来返回,就搞定啦
另外要注意,添加代码后记得清空WooCommerce的配送缓存:可以去WooCommerce设置的「配送」页面随便改个小设置然后保存,或者用缓存插件清一下缓存,不然可能看不到效果哦。
备注:内容来源于stack exchange,提问作者skinnerjoe
相关产品推荐
相关产品推荐

