北极寒流 » 网络资源 » wp_reset_postdata和wp_reset_query的作用与区别 - 2015.12.09

wp_reset_postdata和wp_reset_query的作用与区别

开始说之前,有几点需要弄清楚。

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

wp_reset_postdata和wp_reset_query都是用来重置WordPress查询的,作用一样,为什么创建用两个函数呢?其实这两个函数还是有一点区别的,我们先来看看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 = new WP_Query( $args );

if ( $the_query->have_posts() ) {
	while ( $the_query->have_posts() ) {		
		$the_query->the_post();
		// 有文章了想怎么输出就怎么输出	
	}
} else {
	// 没有文章怎么办?
}

wp_reset_postdata();
//还原文章数据

 

资料来源http://www.wpzhiku.com/the-deffrient-of-wp_reset_postdata-and-wp_reset_query/

发表评论 【登录·注册】

所有留言都会被审核,请勿发布垃圾评论!

(必填)*