阅读有关query_reset_postdataquery_reset_query的一些信息会使我感到困惑。例如:



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


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
那么编解码器是否错误?

#1 楼

两者之间的区别在于



wp_reset_query()-确保将主查询重置为原始主查询

wp_reset_postdata()-确保全局$post已恢复到主查询中的当前帖子。

确实,查看源代码,您会看到wp_reset_query()调用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(),这是您不应该使用永远不需要!

评论


所以基本上您是在说:仅使用wp_reset_postdata(),而编解码器的示例很差? (如果您想做的正确)

–世界上最好的程序员
2014年5月14日7:40



该法典可能会更改,因此我将避免对其做出绝对声明,而这可能会变得不正确。它有一个示例WP_Query()循环,该循环使用wp_reset_query(),而不必要地如此。它可以改用wp_reset_postdata(),但不会造成任何伤害。它还有一个query_posts()示例,该示例必须且必须使用wp_reset_query()。如法典中所述,尽管这是一个不好的示例,并且在不建议使用query_posts()的意义上“不建议”。

–斯蒂芬·哈里斯(Stephen Harris)
14年5月14日在8:08