我正在尝试向特定页面添加带有单个变量的自定义重写规则。“丑陋”的版本是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/car
和
get_query_var(\'carname\')
退货
null
.
我尝试了几种不同的方法来实现这一点(比如修改$wp_rewrite
直接,使用add_rewrite_tag()
), 但我要么得到相同的结果,要么得到404错误。每次尝试再次测试页面时,我都会刷新重写规则和浏览器缓存。我安装了rewrite analyzer插件,我的rewrite出现在那里,与默认的相比看起来是正确的。就我从网络上的所有示例来看,我的代码应该可以工作——这与codex页面上的示例几乎相同——我不知道为什么它不能工作。
这是一个多站点设置(每个站点位于不同的子域上)-我对多站点不太熟悉,但我认为其中没有任何内容会影响自定义重写?
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);