时间:2024-03-29
我是一名WordPress爱好者,一直在使用这个平台来搭建博客和网站。在使用的过程中,发现有两个函数经常被提到,那就是wp_reset_postdata和wp_reset_query。这两个函数用来干什么的、有什么区别,我在这里总结一下我的理解,希望对大家有所帮助。
在进入正题之前,有几点需要弄清楚:
WordPress主查询的示例是$wp_query。
WordPress默认的文章变量是$post。
接下来,我们先来看看wp_reset_postdata。
下面是官方描述:
在使用WP_Query类新建查询实例后,使用这个函数重置主循环的全局$post变量,此函数把$post变量恢复到了当前页面的主循环。
我们知道,在PHP中,如果给变量重新赋值,后面的值会覆盖前面的,放在WordPress主次查询中,在某个页面新建查询后,新查询的$post变量会覆盖主循环的$post变量。
而我们通常需要在主查询中间插入一部分内容,比如在某个页面中间调用某个分类的文章列表,然后接着显示主查询的内容,而新插入的内容把主查询的$post变量修改了,后面还怎么显示?这时候,wp_reset_postdata来了,调用一下这个函数,被改变的主查询$post变量就轻轻松松的回来了。
还是先看官方描述:
wp_reset_query()还原$wp_query和全局文章数据到原始主查询,此函数应该在query_posts()后调用。
这里说的全局文章数据就是上面的全局$post变量的值,一起被还原的还有$wp_query()查询实例。到这里,区别已经出来了,wp_reset_query()功力更深厚,不但能还原全局$post变量,还把包含这个变量的实例一起还原了。
在我的实践中,有两种情况需要用到wp_reset_query。
使用了query_post之后(不建议使用这个,会制造出来很多麻烦)。
用$wp_query变量新建WordPress查询实例之后(基本上等于query_post了,所以新建查询实例就不要用$qp_query作为变量名了)。
其他情况下,直接用wp_reset_postdata就足够了,下面给出一个建议的新建查询的用法,大家可以参考一下。
$args=array( 'post_type' => 'post', 'author' => 5 //这里可以添加任何wp_query查询参数 ); $the_query=newWP_Query($args); if($the_query->have_posts()){ while($the_query->have_posts()){ $the_query->the_post(); //有文章了想怎么输出就怎么输出 } }else{ //没有文章怎么办? } wp_reset_postdata(); //还原文章数据
以上就是我的理解,如果有不妥之处,欢迎指正。
Copyright © 2019-2024 19.org.cn