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 接受,甚至自定义,都可以在那里使用,但查询是否返回任何帖子当然取决于是否有与查询匹配的帖子。:)