Pretty URL with add_query_var

时间:2011-10-22 作者:Adam Dempsey

我试图在我网站上的每个帖子中添加一个“子帖子”,例如

地点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结构,因此我无法让自定义帖子类型具有该结构以及站点页面。

1 个回复
最合适的回答,由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

参考文献:

结束

相关推荐

Hide password protected posts

如果我创建一篇帖子并将可见性设置为“密码保护”,它仍然会显示在首页和提要中。有没有可能从总体视图中完全隐藏帖子,但仍然允许快速访问某些人,而无需为他们创建帐户?(这在WP 3.0.4中)