wp_reset_postdata 和 wp_reset_query 的作用与区别

文 / @WordPress主题

我在WordPress中的实践:wp_reset_postdata和wp_reset_query

我是一名WordPress爱好者,一直在使用这个平台来搭建博客和网站。在使用的过程中,发现有两个函数经常被提到,那就是wp_reset_postdata和wp_reset_query。这两个函数用来干什么的、有什么区别,我在这里总结一下我的理解,希望对大家有所帮助。

在进入正题之前,有几点需要弄清楚:

  • WordPress主查询的示例是$wp_query。
  • WordPress默认的文章变量是$post。

接下来,我们先来看看wp_reset_postdata。

wp_reset_postdata的作用

下面是官方描述:

在使用WP_Query类新建查询实例后,使用这个函数重置主循环的全局$post变量,此函数把$post变量恢复到了当前页面的主循环。

我们知道,在PHP中,如果给变量重新赋值,后面的值会覆盖前面的,放在WordPress主次查询中,在某个页面新建查询后,新查询的$post变量会覆盖主循环的$post变量。

而我们通常需要在主查询中间插入一部分内容,比如在某个页面中间调用某个分类的文章列表,然后接着显示主查询的内容,而新插入的内容把主查询的$post变量修改了,后面还怎么显示?这时候,wp_reset_postdata来了,调用一下这个函数,被改变的主查询$post变量就轻轻松松的回来了。

wp_reset_query的作用

还是先看官方描述:

wp_reset_query()还原$wp_query和全局文章数据到原始主查询,此函数应该在query_posts()后调用。

这里说的全局文章数据就是上面的全局$post变量的值,一起被还原的还有$wp_query()查询实例。到这里,区别已经出来了,wp_reset_query()功力更深厚,不但能还原全局$post变量,还把包含这个变量的实例一起还原了。

什么时候使用wp_reset_query,什么时候用wp_reset_postdata?

在我的实践中,有两种情况需要用到wp_reset_query。

  1. 使用了query_post之后(不建议使用这个,会制造出来很多麻烦)。
  2. 用$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();
//还原文章数据

以上就是我的理解,如果有不妥之处,欢迎指正。

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。