根本区别是:
- 在
add_rewrite_rule()
增加了一个特定的规则将其解释
- 在
add_rewrite_tag()
增加了一个占位符在URL结构使用。然后,此占位符用于生成多个规则。
例如,假设您是一家旅行社,在各个国家/地区宣传酒店。您可能希望酒店的网址像
www.example.com/hotels/UK/Balmoral
国家/地区(在此示例中为UK)是自定义分类术语,而Balmoral是酒店(职位类型)。我们可以为此添加重写规则,但是随后我们必须为以下规则生成一条规则:
- 酒店本身
- 酒店的附件
- 适用于酒店(职位)的规则,它会散布在多个页面等上。
生成这些规则可能会变得很复杂。此外,我们可能会与WordPress自己的帖子类型规则竞争-由我们在注册帖子类型时设置的永久结构生成。(无论如何,让WordPress完成工作)。
这种“永久结构”(类似于您在永久链接设置中为帖子设置的内容)决定了WordPress生成的重写规则。但是,由于我们需要一个包含一些未知(国家)的结构(我们要对其进行解释),因此我们需要提供一个表单的占位符%country%
。(与%category%
帖子几乎相同)。
例如:
add_action_init('init','wpse71305_register_types');
function wpse71305_register_types(){
//You'll need to register the country taxonomy here too.
//Add 'country' tag.
add_rewrite_tag('%country%', '([^&/]+)'));
//Register hotel post type with %country$ tag
$args = array(
...
'has_archive'=>true,
'rewrite' => array(
'slug'=>'hotels/%country%',
'with_front'=> false,
'feed'=> true,
'pages'=> true
)
...
);
register_post_type('hotel',$args);
}
注意: WordPress不知道如何从%country%
标记生成url- 您需要告诉它这样做。(我在下面链接到的文章中对此进行了介绍)。
最终,WordPress还将存储匹配的值,以便您可以通过get_query_var()
(不是标准重写规则的方法)进行检索。
您还可以创建要在帖子的永久结构中使用的标签(在“永久链接设置”页面中进行设置)。
通过添加标签,我们可以在永久结构中使用它。WordPress然后知道
- 期待什么
- 如何解释网址(检查其是否匹配)
- 如何解释价值(即“英国”)
(作为参考,请参阅我写的这篇文章:http : //wp.tutsplus.com/tutorials/creative-coding/the-rewrite-api-the-basics/)。
编辑
正如评论中所指出的,上述示例register_taxonomy()
实际上并不理想add_rewrite_tag()
。
关于“组合”使用它们的食典文件:这可能会引起误解,因为它们可以单独使用。如上所述,但是,add_rewrite_tag()
将标签名称添加到WordPress了解“查询变量”的位置。实际上,这使您可以使用检索值get_query_var()
。因此,当add_rewrite_rule()
与一起使用时add_rewrite_tag()
,变量将由WordPress存储。但是还有其他方法可以做到这一点(请参阅此答案 - 另请注意Rob Vermeer的评论)。
还相关:如何从重写的URL中检索$ _GET变量?
add_rewrite_tag()
可以将其用于Settings->Permalinks
。关于使用分类法,是否需要使用add_rewrite_tag()
?我从Codex页面上得到的印象不是,但似乎很常用。我扩展了有关与Codex页面中建议的add_rewrite_tag()
结合使用的问题。add_rewrite_rule()