什么时候应该使用add_rewrite_tag()?


22

我花了几天时间尝试学习如何最好地添加重写规则。到目前为止,我的理解是可以使用一种添加简单规则的合适方法add_rewrite_rules(),这在很大程度上要感谢Jan Fabry在这次交流中的作用。

尽管他提到add_rewrite_tags()我还没有看到指南来解释何时使用它是有益的,而不是添加重写规则的其他方法或用法的任何很好的例子。它似乎是一个更强大的工具,但这就是我能理解的全部。我发现Codex中的示例过于神秘不完整。有人可以详细说明还是指向一些资源?我发现Google上没有任何有用的东西。

编辑: Codex页面讨论了“通常”与结合使用的情况add_rewrite_rules(),但不再赘述。同样,食品页add_rewrite_rules()add_rewrite_tags(),但它也是非常稀疏的信息。何时以及如何使用这种组合?我发现的唯一示例是 Rob Vermeer的答案,我不明白。

Answers:


21

根本区别是:

  • 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()
seron 2012年

关于分类法,您绝对是正确的(对我而言这是一个不好的例子)。请参阅的这一部分register_taxonomy()。一个更好的例子是,当您想使用类似方法%country%,但当国家/地区只是常见的查询变量而不是分类法时。这些情况很罕见-我从来没有用过add_rewrite_tag()
史蒂芬·哈里斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.