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

如何修正WooCommerce配送类显示顺序,使其按指定价格排序?

解决WooCommerce配送类显示顺序不符合预期的问题

手动添加配送类的顺序不会决定前端显示顺序,WooCommerce默认按配送类ID或名称排序。要实现你期望的$80、$90、$200、$300升序显示,有两种可靠方法:

方法一:插件可视化排序

  • 安装WooCommerce Shipping Classes Order类配送类排序插件
  • 激活后进入WooCommerce → 设置 → 配送 → 配送类页面
  • 直接拖拽配送类到目标顺序,保存后前端将按该顺序显示,操作简单无需代码。

方法二:代码自定义排序(适合不想用插件的场景)

方式1:指定固定顺序

将以下代码添加到主题functions.php文件,或使用代码片段插件(如Code Snippets)添加:

add_filter( 'woocommerce_shipping_classes', 'custom_sort_shipping_classes' );
function custom_sort_shipping_classes( $classes ) {
    // 替换为你实际的配送类slug,按期望顺序排列
    $desired_order = array( 'shipping-80', 'shipping-90', 'shipping-200', 'shipping-300' );
    
    $sorted_classes = array();
    foreach ( $desired_order as $slug ) {
        foreach ( $classes as $class ) {
            if ( $class->slug === $slug ) {
                $sorted_classes[] = $class;
                break;
            }
        }
    }
    
    return $sorted_classes;
}
  • 配送类slug可在对应配送类的编辑页面查看,替换为你自己的slug即可。

方式2:按名称中的价格自动排序

如果配送类名称包含价格(如“标准配送 $80”),可通过代码自动提取价格并排序,无需手动指定slug:

add_filter( 'woocommerce_shipping_classes', 'sort_shipping_classes_by_price_in_name' );
function sort_shipping_classes_by_price_in_name( $classes ) {
    usort( $classes, function( $a, $b ) {
        // 从名称中提取数字价格
        preg_match('/\$(\d+)/', $a->name, $matches_a);
        preg_match('/\$(\d+)/', $b->name, $matches_b);
        
        $price_a = isset($matches_a[1]) ? (int)$matches_a[1] : 0;
        $price_b = isset($matches_b[1]) ? (int)$matches_b[1] : 0;
        
        return $price_a - $price_b; // 升序排序,降序则改为$price_b - $price_a
    });
    
    return $classes;
}

内容的提问来源于stack exchange,提问作者kola popa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:52:44