我正在尝试创建一个几个层次的永久链接规则。
我有一个基本页面/page-slug/
- 我在它后面附加了一个新端点:/page-slug/my-endpoint/
- 从这里,我需要嵌套一个id和一个字符串,其中包含$_GET
变量,例如/page-slug/my-endpoint/?some_id=123&some_string=string
应成为:/page-slug/my-endpoint/123/string/
我成功注册了所有查询变量,我可以在我的方法中使用它们(例如,如果我注册了var_dump( $wp_query->query_vars )
他们将出现在通过设置的位置$_GET
).
我无法使用的是重写规则来将URL转换为永久链接(此代码段运行于init
挂钩时间):
foreach ( $this->query_vars as $key => $var ) {
add_rewrite_endpoint( $var, EP_PERMALINK | EP_PAGES, $var );
if ( \'my-endpoint\' == $key ) {
add_rewrite_tag( \'%some_id%\', \'([^&]+)\' );
add_rewrite_tag( \'%some_string%\', \'([^&]+)\' );
$page_id = get_some_page_id();
$page_slug = get_post( $page_id )->post_name;
// e.g. /page-slug/my-endpoint/123/some-string/
add_rewrite_rule(
"{$page_slug}/{$var}/([^/]*)/([^/]*)/?$",
\'index.php?page_id=\' . $page_id . \'&some_id=$matches[1]&some_string=$matches[2]\',
\'top\'
);
}
}
我测试了regex,看起来没有错,它捕捉到了我需要的东西(123
和some-string
).高达\'page-slug/\'
还有\'page-slug/my-query-var/
(2层深)它工作得很好,是两个重写标记在一个非常永久的结构中使用时不起作用。
我试过了https://wordpress.org/plugins/monkeyman-rewrite-analyzer/ 规则就在那里,但我不确定它们的解释