当前位置: 首页>>技术问答>>正文


自定义循环后wp_reset_postdata()或 wp_reset_query()?

webfans 技术问答 , , 去评论

问题描述

阅读有关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()。在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

那么Codex错了吗?

最佳解决办法

两者之间的区别在于

  • wp_reset_query() – 确保主查询已重置为原始主查询

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

实际上,查看source,您会看到wp_reset_query()调用wp_reset_postdata()。这两者之间的唯一区别是这一行:

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

(in wp_reset_query())。 So 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(),这是你不应该需要的!

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/2399.html,转载请务必附带本地址声明。