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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 15:45:59