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

如何创建带分页排序的促销产品页面?解决分页404问题

解决WooCommerce促销产品页面分页404问题

你的代码核心问题是重写规则未覆盖分页路径,导致shop/sale/page/2这类URL无法被WordPress解析,触发404错误。以下是修正后的完整实现方案:

步骤1:更新重写规则(包含分页匹配)

替换原来的重写规则代码,新增分页路径的匹配规则,同时传递分页参数paged:

add_action('init', 'gs_add_sale_rewrite_rule');
function gs_add_sale_rewrite_rule() {
    // 匹配分页路径(如 shop/sale/page/2)
    add_rewrite_rule(
        '^shop/sale/page/(\d+)/?$',
        'index.php?post_type=product&sale_products=1&paged=$matches[1]',
        'top'
    );
    // 匹配基础路径(shop/sale)
    add_rewrite_rule(
        '^shop/sale/?$',
        'index.php?post_type=product&sale_products=1',
        'top'
    );
}

步骤2:保留查询变量添加(无需修改)

add_filter('query_vars', 'gs_add_sale_query_var');
function gs_add_sale_query_var($vars) {
    $vars[] = 'sale_products';
    return $vars;
}

步骤3:优化主查询过滤(确保分页参数生效)

在原代码基础上,确保主查询能正确获取分页参数paged:

add_action('pre_get_posts', 'filter_sale_products_query');
function filter_sale_products_query($query) {
    if (!is_admin() && $query->is_main_query() && get_query_var('sale_products')) {
        $query->set('post_type', 'product');
        // 设置分页参数,默认第1页
        $paged = get_query_var('paged', 1);
        $query->set('paged', $paged);
        $query->set('meta_query', array(
            array(
                'key'     => '_sale_price',
                'value'   => 0,
                'compare' => '>',
                'type'    => 'NUMERIC'
            )
        ));
    }
}

关键操作:刷新重写规则

修改重写规则后,必须刷新WordPress的重写规则才能生效:

  1. 登录WordPress后台
  2. 进入设置 → 固定链接
  3. 无需修改任何设置,直接点击「保存更改」按钮

额外说明(排序功能兼容)

如果需要保留WooCommerce默认的产品排序功能,无需额外代码——因为我们的查询基于product自定义文章类型,WooCommerce的排序参数(如orderby、order)会自动被主查询识别并生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 13:10:03