我对重写规则有一些问题。我有这样一个URL:
http://www.domain.com/post-type/parent-page/child-page/section-id
我想通过查询变量来处理
http://www.domain.com/post-type/parent-page/child-page?section=section-id
我有这个标签和规则集:
add_action(\'init\', \'custom_rewrite_tag\', 10, 0);
function custom_rewrite_tag() {
add_rewrite_tag(\'%section%\', \'([^(&)]+)\');
}
add_action(\'init\', \'custom_rewrite_rule\', 10, 0);
function custom_rewrite_rule() {
add_rewrite_rule(\'post-type/(.+?)/(.+?)/(.+?)/?$\', \'index.php?pagename=$matches[1]/$matches[2]§ion=$matches[3]\',\'top\');
}
然而,页面正在404和输出
$wp->matched_query
显示它没有选择我的规则,而是进一步选择规则列表(由WP自动创建)。它实际上与
$wp_rewrite->wp_rewrite_rules()
以开头的数组
post-type
.
奇怪的是,如果我将规则更改为:
add_rewrite_rule(\'post-type/(.+?)/(.+?)/(.+?)/?$\', \'index.php?p=1234567&extravar=$matches[1]/$matches[2]§ion=$matches[3]\',\'top\');
(即,通过转到一个不存在的ID,有目的地404页面,并只是传递变量以供参考)
$wp->matched_query
显示我的正则表达式,url与它应该的一样(
index.php?p=1234567&extravar=parent-page/child-page§ion=section-id
)
我的重定向URL导致重写引擎跳过我的规则的原因是什么?有什么事吗pagename
?
Edit: 其他测试表明http://www.domain.com/post-type/?pagename=parent-page/child-page§ion=section-id 作品所以pagename
显然是有效的。
Edit 2: 更多测试,更改add_rewrite_rule
调用以检查帖子类型。。。无骰子:
add_rewrite_rule(\'post-type/(.+?)/(.+?)/(.+?)/?$\', \'index.php?post_type=post-type&pagename=$matches[1]/$matches[2]§ion=$matches[3]\',\'top\');
我也尝试过使用
$matches[2]
, 仍不工作:
add_rewrite_rule(\'post-type/(.+?)/(.+?)/(.+?)/?$\', \'index.php?post_type=post-type&pagename=$matches[2]§ion=$matches[3]\',\'top\');
奇怪的是,手动构建这些URL(如填充查询字符串值)实际上加载了正确的页面。不知道重写API会有什么不同。