自定义循环后是wp_reset_postdata()还是wp_reset_query()?


42

阅读一些有关的东西query_reset_postdataquery_reset_query使我感到困惑。例如:

  1. 是否需要同时使用wp_reset_postdata和wp_reset_query?

  2. http://www.poststat.us/properly-reset-wordpress-query/

以上指出您仅应query_reset_postdata()在使用“单独查询”时使用。在example2中有一条评论:

WP_Query( $args ) = wp_reset_postdata();

query_posts ( $args ) = wp_reset_query();

确实不应该使用,wp_reset_query因为您不应该使用query_posts !?

在WP Codex中,它指出您应该wp_reset_query()在自定义循环后使用(第一个示例)http://codex.wordpress.org/Function_Reference/wp_reset_query

那么,法典是错的吗?

Answers:


65

两者之间的区别在于

  • wp_reset_query() -确保将主查询重置为原始主查询
  • wp_reset_postdata()-确保全局$post已还原到主查询中的当前帖子。

确实,查看源代码,您会看到wp_reset_query()calls wp_reset_postdata()。两者之间的唯一区别是此行:

$GLOBALS['wp_query'] = $GLOBALS['wp_the_query'];

(在中wp_reset_query())。因此wp_reset_query()只有在这两个全局变量不同的情况下才有必要,并且只有query_posts()在某些地方使用过时才会发生。

我什么时候应该使用它们?

简单的说:

  • wp_reset_postdata() -每次定制后立即 WP_Query()
  • wp_reset_query() -在每次循环后立即使用 query_posts()

我应该使用wp_reset_query吗

是的,但是只有在使用之后才需要query_posts()。正如您所指出的,永远不要使用query_posts()。因此,如果您从未使用过,query_posts()无需调用wp_reset_query()(代替wp_reset_postdata()

简而言之,不是您不应该使用wp_reset_query()而不是wp_reset_postdata(),而是您永远不需要!


1
因此,基本上您是在说:仅使用wp_reset_postdata()而编解码器的示例很差?(如果您想做正确的话)
bestprogrammerthetheworld,2014年

1
该法典可能会更改,因此我将避免对其做出绝对声明,而这可能会变得不正确。它有一个WP_Query()循环示例,该循环使用了wp_reset_query()不必要的循环。它可以wp_reset_postdata()代替使用,但不会造成伤害。它还有一个query_posts()示例,说明了它必须并且必须使用的地方wp_reset_query()。正如法典中所指出的那样,尽管这是一个不好的例子,并且query_posts()从不应该使用的意义上说“不建议” 。
Stephen Harris
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.