今天折腾一个问题的时候,突然想到了标题中的问题,虽然一直在使用官方的模板,但是上面两个函数都是见过的,但是忘记是在什么情况下使用的,所以也没有去细究他们之间的差别,今天算是有机会了解一下了。

首先我们还是看看来自官方针对两个函数的介绍吧。

  • wp_reset_query() 函数介绍
  • 函数用法
  • Destroys the previous query and sets up a new query.

  • 功能介绍
  • This should be used after query_posts() and before another query_posts(). This will remove obscure bugs that occur when the previous WP_Query object is not destroyed properly before another is set up.

  • 参数介绍
  • 暂无数据
  • 返回值
  • 暂无数据

  • wp_reset_postdata() 函数介绍
  • 函数用法
  • After looping through a separate query, this function restores the $post global to the current post in the main query.

  • 功能介绍
  • 暂无数据
  • 参数介绍
  • 暂无数据
  • 返回值
  • 暂无数据
  • 看了官方的介绍后,你可能还是不太明白之间的差别,说实话,反正我是不明白的,不过经过谷歌了解之后,大致了解了相关内容,简单的说就是下面的意思

    什么时候用wp_reset_query()

    什么时候用wp_reset_postdata()函数,从上面的函数介绍可以看出,我们只有在使用query_posts()函数的时候才需要用到wp_reset_postdata(),但是我们需要了解到的就是网络上面很多地方都不推荐使用query_posts()进行文章数据查询,具体可以去这篇文章: https://wordpress.stackexchange.com/questions/155956/some-doubts-about-how-the-main-query-and-the-custom-query-works-in-this-custom-t

    所以根据上面的内容显示简单的可以描述为,如果你使用了wp_reset_query函数的话,要么就是代码错误,要么就需要重新考虑代码结构编写了。

    什么时候用wp_reset_postdata()

    根据函数描述,主要适用于主循环或者多个循环,我的个人理解就是当你使用一个循环的时候,其中所有的数据指向是针对第一个的,如果这个时候不执行该函数的话,再次使用wp_query查询,则指向依然是第一个循环内的对象,我个人是这么理解的,如果错误,欢迎指正。

    总结

    不管怎么样,你可以不懂上面的内容,但是你可以看看下面的内容:


  • wp_reset_postdata():在每次自定义WP_Query()后立即执行。
    wp_reset_query():在每次使用query_posts()循环后立即执行。
  • 但是不推荐使用query_posts(),所以你可以通过检查wp_reset_query()函数来确定你的代码是否正确使用。