Woocommerce分类页排序需求:将无价格/0价产品置于有价格产品之后
解决WooCommerce分类页无/0价格产品排序问题
实现方案
通过WordPress的查询钩子修改产品排序逻辑,让有正常价格的产品默认排在分类页前列,价格为0或无价格的产品自动靠后,无需手动维护。
具体操作步骤
1. 编辑主题的functions.php文件
找到当前启用主题的functions.php文件(路径:wp-content/themes/你的主题名称/functions.php),在文件末尾添加以下代码:
add_action('pre_get_posts', 'sort_products_by_price_priority'); function sort_products_by_price_priority($query) { // 仅对前台产品分类页生效,不干扰后台操作 if (!is_admin() && $query->is_main_query() && is_product_category()) { // 区分三种产品价格状态 $query->set('meta_query', array( 'relation' => 'OR', 'valid_price' => array( 'key' => '_price', 'value' => 0, 'compare' => '>', 'type' => 'NUMERIC' ), 'zero_price' => array( 'key' => '_price', 'value' => 0, 'compare' => '=', 'type' => 'NUMERIC' ), 'no_price' => array( 'key' => '_price', 'compare' => 'NOT EXISTS' ) )); // 设置排序优先级:有效价格产品在前,0价格次之,无价格最后;次级排序可自定义 $query->set('orderby', array( 'valid_price' => 'DESC', 'zero_price' => 'ASC', 'no_price' => 'ASC', 'title' => 'ASC' // 可替换为'price' => 'ASC'等其他排序规则 )); } }
2. 代码说明
pre_get_posts钩子:在WordPress执行数据库查询前修改参数,不会影响后台管理页面- 条件判断:确保代码只作用于前台的产品分类页,避免干扰其他页面逻辑
meta_query:精准筛选出三种价格状态的产品orderby:定义排序优先级,你可以根据需求修改次级排序规则(比如按价格升序、发布时间等)
3. 注意事项
- 修改前务必备份
functions.php文件,防止代码错误导致网站无法访问 - 如果你使用子主题,建议将代码添加到子主题的
functions.php中,避免主题更新时代码被覆盖 - 若产品使用销售价格(
_sale_price),可将代码中的_price替换为_sale_price适配需求
内容的提问来源于stack exchange,提问作者Fred
相关产品推荐
相关产品推荐

