我试图在我网站上的每个帖子中添加一个“子帖子”,例如
地点com/product one/changelogsite。com/product 2/changelogsite。com/产品三/变更日志
这是我使用atm的代码,我在这里的某个地方找到的:
global $wp,$wp_rewrite;
$wp->add_query_var(\'sub-page\');
$wp_rewrite->add_rule(\'([^/]+)/(changelog)\',\'index.php?pagename=$matches[1]&sub-page=$matches[2]\', \'top\');
$wp_rewrite->flush_rules(false); // This should really be done in a plugin activation
如果我浏览到该站点,这会很好地工作。com/产品一?子页=更改日志,但如果我转到站点。com/product-one/changelog我刚被重定向回站点。com/产品一
因此,我禁用了规范重定向作为测试,使用:
remove_filter(\'template_redirect\', \'redirect_canonical\');
现场。com/product-one/changelog不会重定向,但会返回404和站点。com/产品一?子页=变更日志仍然有效。
有什么东西我可以改变我的重写,使这项工作?
注意:我知道我可以很容易地使用自定义帖子类型,我开始走这条路线,但由于该站点已经使用了%postname%permalink结构,因此我无法让自定义帖子类型具有该结构以及站点页面。
最合适的回答,由SO网友:Tom J Nowell 整理而成
add_rewrite_endpoint( \'changelog\', EP_ROOT );
将添加端点,
changelog
, 然后您可以查看
template_redirect
钩
匹配查询变量($wp_query->query
) 数组应包含键changelog
包含在/
在值中。所以对于URLexample.com/product1/changelog/5
您将有一个名为changelog
具有值5
.
若端点后并没有任何内容,那个么变量将存在,但包含空字符串。请注意get_query_var()
不适用于这种用途,因为如果根本没有设置查询变量,它会硬编码为返回空字符串。
只需检查变量是否存在就足够了,如果存在,请在查询挂钩中修改查询变量(例如pre_get_posts
) 并使用变更日志模板加载您自己的子帖子。
您可能还想尝试使用不同的permalink端点掩码,例如。EP_PAGES
参考文献: