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

WordPress中add_rewrite_rule第二个参数不生效问题求助

解决add_rewrite_rule()分页参数不生效的问题

看起来你已经找对了方向,但可能漏掉了几个关键步骤导致重写规则的查询参数没生效。我帮你梳理下排查和修复的要点:

1. 刷新重写规则(最容易忽略的一步)

WordPress不会自动检测重写规则的变化,每次添加或修改规则后,你必须手动触发刷新:

  • 进入后台「设置」→「固定链接」,不用修改任何设置,直接点击「保存更改」即可完成重写规则刷新。
  • 本地开发时也可以用代码强制刷新(仅测试时临时使用,上线后务必移除,避免影响性能):
flush_rewrite_rules();

注意:绝对不要把flush_rewrite_rules()放在init钩子里长期运行,否则每次页面加载都会刷新规则,拖慢网站速度。

2. 检查正则匹配与查询参数的正确性

你的正则规则publicacoes/(.+?)/page/?([0-9]{1,})/?$逻辑没问题,但有个细节要确认:
如果artigo是自定义文章类型,且它的分类用的是自定义分类法(而非WordPress默认的分类),那你不能用category_name参数,得换成自定义分类法的参数。比如你的自定义分类法叫artigo_category,查询参数应该改成:

'index.php?post_type=artigo&taxonomy=artigo_category&term=$matches[1]&paged=$matches[2]'

另外$matches的索引是对的,$matches[1]对应分类别名,$matches[2]对应页码,这点没问题。

3. 验证规则优先级与冲突

用Debug This插件检查时,要确认你的规则排在最顶部(因为你设置了'top'优先级),没有被其他同匹配模式的规则覆盖。如果有其他规则先匹配到相同的URL结构,你的规则就不会生效。

同时可以在模板中添加调试代码,确认paged参数是否被正确传递:

var_dump(get_query_var('paged'));

如果输出为空,可能是paged变量没有被正确识别,不过这个参数是WordPress默认支持的,大概率还是规则没刷新或者参数映射错误导致的。

4. 修复后的完整代码示例

假设你用的是WordPress默认分类法,调整后的代码如下:

add_action( 'init', 'add_category_base_rewrite_rule' );
function add_category_base_rewrite_rule() {
    add_rewrite_rule( 
        'publicacoes/(.+?)/page/?([0-9]{1,})/?$', 
        'index.php?post_type=artigo&category_name=$matches[1]&paged=$matches[2]', 
        'top' 
    );
}

// 仅修改规则后临时执行一次,刷新完成后删除此行
// flush_rewrite_rules();

最后验证步骤

  1. 保存固定链接刷新规则
  2. 用Debug This确认你的规则已被正确添加到规则列表顶部
  3. 访问类似publicacoes/你的分类别名/page/2的URL,查看查询参数是否正确映射

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:27:42