add_rewrite_endpoint()
仅支持static endpoint names 喜欢trackback
和recipes
, 因此,如果需要动态端点name/slug,则您需要使用add_rewrite_rule()
相反
让你知道,即使add_rewrite_endpoint()
如果不支持动态名称/段塞,则您的代码将无法工作,因为您的函数运行得太早(通过init
挂钩)因此get_queried_object()
将返回null,这意味着$term
实际上不是一个对象(即使您在术语存档页上)。
所以对于food/onion/onion-recipes
结构或端点,其中onion
是术语slug,您可以使用add_rewrite_rule()
像这样:
add_action( \'init\', function () {
// Adds a rewrite rule for /food/<term slug>/<term slug>-recipes where "food"
// here is a custom taxonomy.
add_rewrite_rule(
\'food/(.+?)/([^/]+)-recipes/?$\',
\'index.php?food=$matches[1]\',
\'top\'
);
} );
注意事项:
(.+?)
是从当前URL路径读取的术语slug或path,slug可以是onion
或“a”;“目录”/类路径onion/child
如果您的分类法是分层的。([^/]+)
也是一个术语slug,但没有/
(斜杠)。(我特意把它放在一个组中,以防您需要访问$matches[2]
)在上述正则表达式(RegEx)模式中(这是add_rewrite_rule()
), 我使用了2个捕获组或子模式,URL中的每个组/子模式匹配将存储在一个名为$matches
.
因此,如果当前URL为https://example.com/food/onion/child/child-recipes
, 然后$matches[1]
是onion/child
, 鉴于$matches[2]
是child
. 一、 e。food/(onion/child)/(child)-recipes
— 注意括号。
您可以测试和使用上述正则表达式
here on regex101.com.
另外,记住刷新重写规则!只需访问Permalink设置管理页面。
如果要为端点创建查询var,请更新,如下所示add_rewrite_endpoint()
默认情况下为,因此您可以使用get_query_var()
要从端点名称检索术语slug,可以使用query_vars
hook 注册查询变量。
下面是一个示例,其中查询var(name)是food_recipe
(请确保该名称尚未被使用,例如,现有的帖子类型或分类法):
add_filter( \'query_vars\', function ( $vars ) {
$vars[] = \'food_recipe\';
return $vars;
} );
之后,
更改重写规则的查询(第二个参数add_rewrite_rule()
) 从…起index.php?food=$matches[1]
到index.php?food=$matches[1]&food_recipe=$matches[2]
然后再次刷新重写规则。:)
使用&food-info=recipes
在上述查询中,其中food-info
是一个自定义分类名称/slug,是的,您可以。任何查询参数WP_Query
接受,甚至自定义,都可以在那里使用,但查询是否返回任何帖子当然取决于是否有与查询匹配的帖子。:)