我认为您使用的端点不正确。创建内点时,使用与端点同名的查询变量创建新的重写规则;其值取自端点定义后面的字符串。因此,如果您注册“我的端点”并构建此URL:
/page-slug/my-endpoint/123/some-string
端点传递为
my-endpoint=123/some-string
.
据我从您的代码中了解,您不需要my-endpoint
查询var,因此不需要注册它;或者您可以注册false
查询变量参数的值(此参数当前未记录在codex 但存在于source code):
add_rewrite_endpoint( $var, EP_PERMALINK | EP_PAGES, false );
或者,如果只希望端点位于页面中,请执行以下操作:
add_rewrite_endpoint( $var, EP_PAGES, false );
还有,你检查一下
\'my-endpoint\' == $key
但随后包括
$var
作为端点名称和URL的一部分,而不是
$key
.
不知道是什么$this->query_vars
和get_some_page_id()
是的,我无法准确测试您的代码,但这应该可以:
foreach ( $this->query_vars as $key => $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/
// $key is equal to my-endpoint here because of the previous check
add_rewrite_rule(
"^{$page_slug}/{$key}/([^/]*)/([^/]*)/?$",
\'index.php?page_id=\' . $page_id . \'&some_id=$matches[1]&some_string=$matches[2]\',
\'top\'
);
}
}
Note: 在测试此代码之前,不要忘记刷新重写规则。