http://www.example.com/properties/
每个属性有一个链接,该链接应将用户重定向到“单个属性”页面,该页面显示有关此信息的更多信息。我想知道是否有一种方法可以使链接像这样:
http://www.example.com/properties/123
其中
123
是该属性的ID。因此,如果我有类似properties/some_id
的URL,我希望能够加载视图文件(例如single.php
或page.php
文件)但特定于此URL条件。这可能吗?
#1 楼
将此添加到您主题的functions.php中,或将其放入插件中。add_action( 'init', 'wpse26388_rewrites_init' );
function wpse26388_rewrites_init(){
add_rewrite_rule(
'properties/([0-9]+)/?$',
'index.php?pagename=properties&property_id=$matches[1]',
'top' );
}
add_filter( 'query_vars', 'wpse26388_query_vars' );
function wpse26388_query_vars( $query_vars ){
$query_vars[] = 'property_id';
return $query_vars;
}
这将添加一个重写规则,该规则将请求定向到
/properties/
,后跟任意数字页面名properties
,并设置了查询变量property_id
。只要确保访问您的永久链接设置页面并保存以刷新刷新规则,就将包括此新规则。在您的
page-properties.php
模板中,如果设置了get_query_var('property_id')
,则它将返回属性ID(如果已设置)然后不显示默认属性页面。#2 楼
另一种方法是:add_action('init', function() {
add_rewrite_rule( '^properties/([0-9]+)/?',
'index.php?pagename=properties&property_id=$matches[1]',
'top' );
}, 10, 0);
add_action('init', function() {
add_rewrite_tag( '%property_id%', '([^&]+)' );
}, 10, 0);
Codex重写API /添加重写规则
Codex重写API /添加重写标签
评论
接受的答案适用于4.7(和4.8),不确定您为什么认为不行。您的代码本质上是在做相同的事情,add_rewrite_tag将查询var与query_vars过滤器添加到同一数组。
–米洛
17年7月7日在17:45
@Milo可能对我不起作用,但是我再也没有4.7了,所以我无法检查。我将编辑我的答案。
–克里斯蒂安·莱斯库(Christian Lescuyer)
17年7月8日在7:28
@Milo虽然我个人更喜欢重写标签,但是仍然测试了可接受的答案并且它可以工作。不过,只是一些个人口味。
–杰克·约翰逊(Jack Johansson)♦
17年7月8日在15:36
在永久目录中使用@JackJohansson重写标记是必需的。在这种情况下,这只是WordPress从未使用的额外数据。
–米洛
17年7月8日在15:47
可以将这两个规则添加到同一方法中,最终得到一个更清洁,更有用的功能,以供重新查看并确定是否进行维护工作
–eballeste
18年7月14日在15:51
评论
对我来说这很接近,但是我需要添加:add_filter('init','flushRules');函数flushRules(){全局$ wp_rewrite; $ wp_rewrite-> flush_rules(); }
–tooshel
2012年11月13日17:52
@tooshel您绝对不想在每个请求上都刷新规则,这是一项昂贵的操作,会使您的网站慢下来。您只需在激活插件时或仅通过访问永久链接设置页面一次刷新规则。
–米洛
2012年11月13日20:17
是的,我明白了。 。 。但是当您进行测试时,它确实在那里!
–tooshel
2012年11月14日在20:32
更聪明的重写url regexp可能是^ properties /([[0-9] +)/?。否则它将与example / properties / 1之类的东西匹配
–瑞安·泰勒(Ryan Taylor)
2014-12-12 17:34
@RyanTaylor您确定吗?测试时,它没有捕获example / properties / 1。
–米洛
2014年12月12日在18:14