帮助重写两种帖子类型的规则

时间:2016-03-08 作者:Diego de Oliveira

我正在尝试为两种帖子类型设置两个重写规则。基本上,我想要的结构是:

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\' );
}
如果我只添加第一条规则,它就会起作用。如果我只添加第二条规则,它也会起作用。但是,如果我两者都加上,只有第一条规则有效。第二条规则加载有效页面,但未设置主题变量。

我做错什么了吗?欢迎提供任何提示!

1 个回复
最合适的回答,由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变量,我建议将其更改为一些独特的内容,以防止任何潜在冲突。

相关推荐