WooCommerce产品排序怎么改?

chinaz
chinaz 初级会员超兽战士
发布于 2026-10-08 09:58 ·2 浏览 ·0 回复

学完这篇,你能在 15 分钟内把 WooCommerce 店铺前台的商品顺序改成你想要的样子——不管是让新品置顶、把主推款排到第一位,还是让顾客自己按价格挑。

第一步:改商品列表的默认排序(全局生效)

这一步要做什么:设置顾客打开商品列表页时,默认看到的是按什么顺序排列的商品。

入口在自定义器里,不在 WooCommerce 设置菜单里,很多人第一次找不到:

WordPress 后台 → 外观 → 自定义(Customize) → 左侧点开 WooCommerce → 产品目录(Product Catalog) → 第一项「默认产品排序方式(Default product sorting)」→ 下拉选择一个(默认排序、按热度、按评分、按最新、按价格从低到高、按价格从高到低、按标题字母顺序)→ 点页面顶部蓝色的 「发布」 按钮。

同一页下面还有一行「默认分类下的排序方式(Default product sorting for categories)」,它只管商品分类页,要单独设一次。

注意:WooCommerce 3.3 之前这个选项在「WooCommerce → 设置 → 产品 → 显示」里。如果你照的是老教程,路径对不上按我上面的走。另外「按热度」依赖销量数据,零销量时看起来顺序像乱排的,别以为是坏了。

第二步:控制顾客能自己切换的排序选项

这一步要做什么:决定商品列表右上角那个排序下拉框里,顾客能看到哪几个选项。

默认有:默认排序、按热度、按评分、按最新、按价格低到高、按价格高到低。想删掉或者新增,用 woocommerce_catalog_orderby 过滤器。把代码贴到子主题的 functions.php 末尾,或者装 Code Snippets 插件 → 添加新的 → 粘贴代码 → 点「保存并激活」:

add_filter( 'woocommerce_catalog_orderby', function ( $options ) {
    unset( $options['rating'] );        // 去掉"按评分"
    unset( $options['date'] );          // 去掉"按最新"
    $options['by_sku'] = '按货号排序';   // 新增一项
    return $options;
} );

注意:这只改了「下拉框里有哪些字」。新增的自定义项如果没配对 woocommerce_get_catalog_ordering_args 写排序逻辑,顾客选它只会没反应——两个过滤器要一起用。

第三步:手动拖拽,想把谁排第一就排第一

这一步要做什么:不靠日期、不靠价格,纯人工决定顺序。WooCommerce 自带的排序依据是 menu_order,但后台没有拖拽界面,需要插件。

  1. WordPress 后台 → 插件 → 安装插件,搜索 Post Types Order(作者 Nsp Code),点「现在安装」→「启用」。
  2. 进入 设置 → Post Types Order,把左侧 Products 拖到右边 Sortable 那一列,如果你也想给订单排序就顺手加上,然后点「保存更改」。
  3. 回到 产品 → 所有产品,页面顶部会出现 「Re-Order」 按钮,点进去就是一个拖拽列表,按住商品行上下拖动。
  4. 拖完后点「Update」,再回前台刷新。

注意:拖拽排序只在第一步把「默认产品排序方式」设为「默认排序」时才生效。如果你设的是「按最新」,前台依然按日期走,拖了也白拖。

第四步:用代码按库存、货号、自定义字段排序

这一步要做什么:实现 WooCommerce 下拉框里没有的排序规则。

下面这段让商品列表默认按库存从多到少排列:

add_filter( 'woocommerce_get_catalog_ordering_args', function ( $args ) {
    if ( ! isset( $_GET['orderby'] ) ) {
        $args['orderby']  = 'meta_value_num';
        $args['meta_key'] = '_stock';
        $args['order']    = 'DESC';
    }
    return $args;
} );

meta_key 换成 _sku 就是按货号,换成你自己建的字段名就是按任意自定义字段。

第五步:改完没变化,按这几条排查

  • 缓存:清掉缓存插件(WP Rocket、LiteSpeed Cache 等)的缓存,再去 Cloudflare 点「Purge Everything」,浏览器按 Ctrl+F5 强刷。
  • 主题/页面构建器的商品网格:如果你用 Elementor Pro 的 Products 小工具或 WPBakery 的 Product Grid 输出商品,它们完全无视 WooCommerce 的排序设置,要去小工具自己的「Order By」参数里改。
  • 商品分类页:第二步的手动排序只对全店默认视图有效,分类页要用 pre_get_posts 单独处理。

小结

  • 全局默认排序在 外观 → 自定义 → WooCommerce → 产品目录,改完必须点「发布」。
  • 下拉框的选项用 woocommerce_catalog_orderby 增删,排序逻辑用 woocommerce_get_catalog_ordering_args 实现,两者配套。
  • 人工拖拽排序 = 插件 Post Types Order + 默认排序设为「默认排序」。
  • 拖完、改完不生效,先查缓存,再查是不是主题或页面构建器自己接管了商品输出。
版权声明:本文来自 GJ站长论坛《WooCommerce产品排序怎么改?》
原文链接:https://www.gj0.com/thread-886.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~