How to create custom URL routes?

时间:2011-08-19 作者:Javier Villanueva

我有一个非常特殊的要求,希望我能解释它而不会太混乱。我创建了一个页面模板,其中列出了从外部XML文件获得的一些属性,到目前为止没有问题,比如URL如下所示:

http://www.example.com/properties/
每个属性都有一个链接,可以将用户重定向到“单个属性”页面,该页面显示有关该属性的更多信息。我想知道是否有这样的链接:

http://www.example.com/properties/123
在哪里123 将是属性的id。所以如果我有如下URLproperties/some_id 我希望能够加载视图文件(如single.phppage.php 文件),但特定于此URL条件。

这可能吗?

2 个回复
最合适的回答,由SO网友:Milo 整理而成

将此添加到主题的功能中。php,或put it in a plugin.

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/ pagename后面有数字的任意组合properties, 使用查询变量property_id 设置只需确保访问permalinks设置页面并保存以刷新重写规则,这样就会包含此新规则。

在您的page-properties.php 样板get_query_var(\'property_id\') 将返回属性id(如果已设置),如果未设置,则显示默认属性页。

SO网友:Christian Lescuyer

另一种方法:

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 Rewrite API/add rewrite rule

Codex Rewrite API/add rewrite tag

结束

相关推荐

Enable page templates. How?

基本问题,但我想启用页面模板。我有一个启用了页面模板的主题。我切换到了另一个模板,但没有更改模板的选项,即使在创建新页面时也是如此。如何打开此选项?我在抄本和论坛上找到了根,但找不到。