何时应该使用ADD_REWRITE_TAG()?

时间:2012-11-02 作者:ivavid

我花了几天时间试图学习如何最好地添加重写规则。到目前为止,我的理解是,添加简单规则的合适方法是使用add_rewrite_rules(), 非常感谢Jan Fabry 在这次交流中,世卫组织的阐述非常有用。

虽然他提到add_rewrite_tags() 我还没有看到关于它的指南解释什么时候使用它是有益的,而不是其他添加重写规则的方法,或者任何关于它用法的好例子。这似乎是一个更强大的工具,但这几乎是我所能理解的。我发现抄本中的例子太crypticincomplete. 有人能详细说明一下吗,或者指出一些资源?我在谷歌上找不到有用的东西。

edit:它的Codex page 谈论“一般”将其与add_rewrite_rules(), 但没有详细说明。类似地Codex page 对于add_rewrite_rules()add_rewrite_tags() 但它的信息也非常稀少。何时以及如何使用这种组合?我发现的唯一例子是this answer by Rob Vermeer 我不明白。

1 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

根本区别在于:

add_rewrite_rule() 添加特定规则,该规则被解释为add_rewrite_tag() 添加要在url结构中使用的占位符。然后使用此占位符生成多个规则

  www.example.com/hotels/UK/Balmoral
其中,国家(本例中为英国)是一个自定义的税收术语,而巴尔莫勒是一个酒店(post类型)。我们可以为此添加重写规则,但接下来必须为以下内容生成规则:

酒店本身,酒店的附件,酒店(帖子)的规则,它会覆盖多页等。生成这些规则可能会变得复杂。此外,我们可能会与WordPress自己的帖子类型规则竞争,这些规则是在注册帖子类型时设置的permastructure生成的。(无论如何,让WordPress来完成这项工作)。

这种“permastructure”(与您在permalink设置中为帖子设置的内容类似)决定了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);  
}
Note: WordPress不知道如何从%country% 标记-你需要告诉它这样做。(我在下面链接的一篇文章中介绍了这一点)

最后,WordPress还将存储匹配的值,以便您可以通过get_query_var() (标准重写规则中没有)。

您还可以创建用于帖子permastructure的标记(在Permalink设置页面中进行设置)。

通过添加标记,我们可以在永久结构中使用它。WordPress知道

期望的内容如何解释url(检查是否匹配)

  • 如何解释值(即“UK”)
    • (参考我写的这篇文章:http://wp.tutsplus.com/tutorials/creative-coding/the-rewrite-api-the-basics/).

      编辑如评论中所述,上述示例与register_taxonomy() 事实上通话add_rewrite_tag().

      关于Codex文档中关于“组合使用”它们的内容:这可能会产生误导,因为它们都可以单独使用。然而,如上所述,add_rewrite_tag() 将标记名添加到WordPress understand“query variables”中。实际上,这允许您使用get_query_var(). 因此,当add_rewrite_rule() 与一起使用add_rewrite_tag(), 变量将由WordPress存储。但还有其他方法可以做到这一点(参见this answer - 另请注意Rob Vermeer的评论)。

      也相关:How to retrieve $_GET variables from rewritten URLs?

    结束

    相关推荐