
如何修改WooCommerce的默认产品排序方式?
一、修改默认排序规则
WooCommerce 3.3.0 及以上版本,调整了产品默认排序的修改入口,
- 进入 WordPress 后台,点击 外观-> 自定义(Customizer)。
- 找到 WooCommerce → 产品目录 部分。
- 在 默认产品排序 下拉菜单中选择预设的排序方式(如“最新”、“价格从低到高”等)。
- 点击 发布 保存更改。

您可能会在上面的截图中看到,当我们在自定义器中更改默认产品排序的值时,产品列表上方的产品排序下拉菜单中的值也会随之更改。
二、手动调整单个产品的排序
此方法能更好的对WooCommerce产品进行排序,精准控制个别产品在WooCommerce商店页面的显示顺序。
但要注意,它设置起来比较耗时,不适合产品上千的独立站商城。
要想手动调整产品排序,先转到WordPress左侧菜单栏的产品 > 全部产品,然后点击排序,就可以拖动产品向上或向下调整顺序。
WooCommerce 的默认排序方式是 “菜单排序”,即手动排序,如果没有设置手动产品排序,产品将按字母顺序显示。
进入 WordPress 管理页面的 “所有产品”,然后点击 “排序 “选项卡。然后使用拖放即可。

第二种方法是在产品数据元方框中手动设置 menu_order
值。

现在,让我来教你如何将默认的产品排序 “menu_order + title “改为其他方式。这也可以在 WooCommerce 设置中完成,甚至可以使用过滤器钩子。
三、使用编程方式实现更多高级排序功能
如果你对默认的产品排序选项不满意,还可以添加代码到 functions.php 文件,生成自己的产品排序选项。为此,你需要创建子主题或使用代码片段,确保网站不会受到影响。
首先,在WordPress网站上安装并启用 Code Snippets 代码片段插件。

然后,转到WordPress左侧菜单栏 > Snippets,点击 Add New 添加代码。

接下来,复制粘贴代码到文本框中,保存修改,就能生成新的产品排序选项。

至于产品排序代码,本文分享了按分类和按字母对产品排序,希望能对大家有所帮助。
按库存状态排序(有货优先):
add_filter( 'posts_clauses', 'custom_sort_by_stock_status', 10, 2 );
function custom_sort_by_stock_status( $clauses, $query ) {
global $wpdb;
if ( is_woocommerce() && ( is_shop() || is_product_category() || is_product_tag() )) {
$clauses['join'] .= " LEFT JOIN $wpdb->postmeta istock ON ($wpdb->posts.ID = istock.post_id AND istock.meta_key = '_stock_status')";
$clauses['orderby'] = " istock.meta_value ASC, " . $clauses['orderby'];
}
return $clauses;
}
按照产品类别对产品进行排序:
add_filter('woocommerce_default_catalog_orderby', 'quadlayers_catalog_orderby_for_category');
function quadlayers_catalog_orderby_for_category( $sort_by ) {
if( !is_product_category('uncategorized') ) {
return $sort_by;
}
return 'date';
}
按照字母顺序对产品进行排序:
function quadlayers_alphabetical_shop_ordering( $sort_args ) {
$orderby_value = isset( $_GET['orderby'] ) ? woocommerce_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );
if ( 'alphabetical' == $orderby_value ) {
$sort_args['orderby'] = 'title';
$sort_args['order'] = 'asc';
$sort_args['meta_key'] = '';
}
return $sort_args;
}
add_filter( 'woocommerce_get_catalog_ordering_args', 'quadlayers_alphabetical_shop_ordering')