我正在尝试为两种帖子类型设置两个重写规则。基本上,我想要的结构是:
site.com/app/course/xxxx/
=> 添加query\\u var课程
site.com/app/course/xxxx/theme/xxxx/
=> adss查询变量课程和主题
我设置了两个add_rewrite_rule
:
public function rewrite_rules(){
add_rewrite_tag( \'%course%\', \'([^&]+)\' );
add_rewrite_tag( \'%theme%\', \'([^&]+)\' );
add_rewrite_rule("^app/course/([^/]+)/?",\'index.php?page_id=3400&course=matches[1]\', \'top\' );
add_rewrite_rule(\'^app/course/([^/]+)/theme/([^/]+)/?\',\'index.php?page_id=3400&course=$matches[1]&theme=$matches[2]\', \'top\' );
}
如果我只添加第一条规则,它就会起作用。如果我只添加第二条规则,它也会起作用。但是,如果我两者都加上,只有第一条规则有效。第二条规则加载有效页面,但未设置主题变量。
我做错什么了吗?欢迎提供任何提示!
最合适的回答,由SO网友:Milo 整理而成
第一条规则是捕获所有请求。如果您添加$
锚定在规则的末尾,它们将按照预期的方式运行(您也可以切换规则的顺序,以便更具体的规则“获胜”)。
add_rewrite_rule(
\'^app/course/([^/]+)/?$\',
\'index.php?page_id=3400&course=matches[1]\',
\'top\'
);
add_rewrite_rule(
\'^app/course/([^/]+)/theme/([^/]+)/?$\',
\'index.php?page_id=3400&course=$matches[1]&theme=$matches[2]\',
\'top\'
);
退房
Monkeyman Rewrite Analyzer 用于调试规则。
还要注意的是theme
WordPress内部将其用作POST或GET变量,我建议将其更改为一些独特的内容,以防止任何潜在冲突。