如何创建带分页排序的促销产品页面?解决分页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的重写规则才能生效:
- 登录WordPress后台
- 进入设置 → 固定链接
- 无需修改任何设置,直接点击「保存更改」按钮
额外说明(排序功能兼容)
如果需要保留WooCommerce默认的产品排序功能,无需额外代码——因为我们的查询基于product自定义文章类型,WooCommerce的排序参数(如orderby、order)会自动被主查询识别并生效。
内容的提问来源于stack exchange,提问作者GS_
相关产品推荐
相关产品推荐

