WooCommerce用catalog作商店与分类基址时的分页修复问题
解决WooCommerce中“catalog”作为分类/商店基址时的分页404问题
问题根源
你猜的没错,“catalog”是WooCommerce仅目录模式的保留路由,默认重写规则会和自定义规则冲突。更关键的是,你原有的自定义规则没覆盖分页场景,且正则匹配顺序有问题:^catalog/(.+)/?$会把catalog/xxx/page/2里的xxx/page/2整个当成分类别名,导致WordPress找不到对应分类,返回404。
解决方案
1. 修正自定义重写规则,调整匹配优先级
把分页相关规则放在最前面,确保WordPress先识别分页请求,再处理分类列表和产品详情:
// 产品详情页规则 add_rewrite_rule( '^catalog/(.+)/product-([^/]+)/?$', 'index.php?product_cat=$matches[1]&product=$matches[2]', 'top' ); // 分类分页规则(优先级最高,避免被分类列表规则拦截) add_rewrite_rule( '^catalog/(.+)/page/([0-9]{1,})/?$', 'index.php?product_cat=$matches[1]&paged=$matches[2]', 'top' ); // 分类列表页规则 add_rewrite_rule( '^catalog/(.+)/?$', 'index.php?product_cat=$matches[1]', 'top' );
2. 确保分页参数被正确识别
部分场景下WordPress无法正确抓取paged参数,添加钩子强制分类页读取分页参数:
add_action( 'pre_get_posts', 'fix_catalog_paged_param' ); function fix_catalog_paged_param( $query ) { if ( ! is_admin() && $query->is_main_query() && $query->is_product_category() ) { $paged = get_query_var( 'paged', 1 ); $query->set( 'paged', $paged ); } }
3. 刷新固定链接
修改代码后,进入WordPress后台「设置→固定链接」页面,无需修改设置,直接点击“保存更改”,让WordPress重新生成重写规则。
额外排查点
如果仍未解决,试试这两步:
- 暂时禁用所有非WooCommerce插件,排查插件冲突
- 切换到Storefront等WooCommerce官方主题,排除主题重写规则干扰
内容的提问来源于stack exchange,提问作者CK MacLeod
相关产品推荐
相关产品推荐

