我花了几天时间尝试学习如何最好地添加重写规则。到目前为止,我的理解是添加简单规则的合适方法是使用add_rewrite_rules(),这要感谢Jan Fabry在这次交流中的作用非常有用。没有看到关于它的指南,该指南解释了何时使用它相对于添加重写规则的其他方法或使用方法的任何很好的示例都是相反的。它似乎是一个更强大的工具,但这就是我能理解的全部。我发现食典中的例子太含糊或不完整。有人可以详细说明还是指向一些资源?我没有在Google上找到任何有用的信息。类似地,add_rewrite_tags()的Codex页面引用add_rewrite_rules(),但信息也很少。何时以及如何使用这种组合?我发现的唯一示例就是我不理解的罗伯·维米尔(Rob Vermeer)的答案。

#1 楼

根本的区别是:


add_rewrite_rule()添加了一个特定的规则,该规则被解释了。然后,该占位符用于生成多个规则。例如,假设您是一家旅行社,在各个国家/地区宣传酒店。您可能希望旅馆的网址像

  www.example.com/hotels/UK/Balmoral


,其中国家(在本例中为UK)是自定义的分类术语,而Balmoral是旅馆(职位类型)。我们可以为此添加重写规则,但是随后我们必须为以下规则生成规则:


酒店本身
酒店的附件
酒店规则(帖子),它会散布在多个页面等上。

生成这些规则可能会变得复杂。此外,我们可能会与WordPress自己针对该帖子类型的规则竞争-由我们在注册帖子类型时设置的永久结构生成。 (无论如何,请让WordPress完成工作。)

此“永久结构”(类似于您在永久链接设置中为帖子设置的内容)确定WordPress生成的重写规则。但是,由于我们需要一个包含一些未知(国家)的结构(需要解释),因此我们需要提供形式为add_rewrite_tag()的占位符。 (几乎与%country%的帖子相同)。

例如:从%category%标签-您需要告诉它这样做。 (我在下面链接的文章中对此进行了介绍。)最后,WordPress还将存储匹配的值,以便您可以通过%country%检索它(某些情况您没有标准的重写规则) 。

您还可以创建要在帖子的永久结构中使用的标签(在“永久链接设置”页面中进行设置)。

通过添加标签,我们可以在永久结构。 WordPress然后知道了


会发生什么
如何解释URL(检查是否匹配)
如何解释值(即“英国”)(请参阅我写的这篇文章作为参考,网址为:http://wp.tutsplus.com/tutorials/creative-coding/the-rewrite-api- the-basics /)。

编辑有关“组合使用”它们的食典文档:这可能会产生误导,因为它们可以单独使用。但是,如上所述,get_query_var()将标签名称添加到WordPress理解的“查询变量”中。实际上,这允许您使用register_taxonomy()检索值。因此,当add_rewrite_tag()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年11月4日9:53



关于分类法,您绝对正确(对我而言这是一个不好的例子)。请参阅register_taxonomy()的这一部分。一个更好的例子是当您想使用%country%之类的东西,但是当country只是一个常见的查询变量而不是分类法时。这些情况很少见-我从未使用过add_rewrite_tag()。

–斯蒂芬·哈里斯(Stephen Harris)
2012年11月4日在18:28

@StephenHarris @何时应该选择add-rewrite_tag()来添加占位符(与query_vars过滤器挂钩相比)?

– Siddharth Thevaril
20年7月31日在5:51