You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求帮助:按类型及运费升序排序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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 15:49:35