WordPress Custom URL Rewrites

时间:2013-01-03 作者:amandarm

我正在尝试向特定页面添加带有单个变量的自定义重写规则。“丑陋”的版本是http://example.com/used-cars/car/?carname=name-of-car 我想要的“漂亮”版本是http://example.com/used-cars/car/name-of-car.

http://example.com/used-cars/car/ 是一个带有自定义模板的页面,如果carname 未设置变量。这是我目前掌握的代码:

add_filter(\'query_vars\', \'ip_add_rewrite_query_vars\');
function ip_add_rewrite_query_vars($query_vars) {
    $query_vars[] = \'carname\';
    return $query_vars;
}

add_action(\'init\', \'ip_add_rewrite_rules\');
function ip_add_rewrite_rules() {
    add_rewrite_rule(
        \'used-cars/car/([^/]+)/?$\',
        \'index.php?p=403&carname=$matches[1]\',
        \'top\'
    );
}
有了这个,当我去http://example.com/used-cars/car/name-of-car 它只是重定向到http://example.com/used-cars/carget_query_var(\'carname\') 退货null.

我尝试了几种不同的方法来实现这一点(比如修改$wp_rewrite 直接,使用add_rewrite_tag()), 但我要么得到相同的结果,要么得到404错误。每次尝试再次测试页面时,我都会刷新重写规则和浏览器缓存。我安装了rewrite analyzer插件,我的rewrite出现在那里,与默认的相比看起来是正确的。就我从网络上的所有示例来看,我的代码应该可以工作——这与codex页面上的示例几乎相同——我不知道为什么它不能工作。

这是一个多站点设置(每个站点位于不同的子域上)-我对多站点不太熟悉,但我认为其中没有任何内容会影响自定义重写?

1 个回复
SO网友:Dennis Smolek

我对名为shops的自定义记录及其特定ID号进行了类似的处理。就我而言,我想要http://example.com/shops/UNIDrecordthatsreallylong

加载变量shop\\u unid作为unid记录。以下是我的工作功能:

//Shop page rewrites
function shop_rewrite() {
    add_rewrite_rule(\'^shops/([^/]*)/?\',\'index.php?pagename=shops&shop_unid=$matches[1]\',\'top\');
    add_rewrite_tag(\'%shop_unid%\',\'([^&]+)\');
}
add_action(\'init\', \'shop_rewrite\');
请注意,我使用了pagename而不是post number。你永远不知道这是否会改变,比如说在不同的多站点上,或者你是否将该站点导出到一个新的服务器上,所以我总是避免对特定的帖子ID进行硬编码。

现在,在页面上或在其自身功能中,应该可以:

global $wp_query;
$shop_unid = $wp_query->query_vars[\'shop_unid\'];
print_r($shop_unid);

结束

相关推荐