问题描述

阅读一些关于 query_reset_postdataquery_reset_query 的东西让我困惑。例如:

  1. Is there any need to use both wp_reset_postdata and wp_reset_query together?

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

以上说明使用”separate queries” 时应该只使用 query_reset_postdata()。在例 2 中有一个评论:

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

那鳕鱼是错的吗?

最佳解决方案

两者之间的区别在于

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

实际上,看看 source,你会看到 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(),这是你不应该需要!

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。