WordPress:rewind_posts(),wp_reset_postdata()和wp_reset_query()之间的区别

时间:2014-05-19 04:43:43

标签: php wordpress wordpress-theming

WordPress功能rewind_posts()wp_reset_postdata()wp_reset_query()之间的区别是什么?我何时应该使用它们?

如果我在single.php中有这部分代码:

$query = new WP_Query($some_args);
while ($query->have_posts()) : $query->the_post();
    ...
endwhile;

这与此相同:

$query = new WP_Query($some_args);
while (have_posts()) : the_post();
    ...
endwhile;

2 个答案:

答案 0 :(得分:9)

你问题中的两个陈述并不相同。

在第一个块中,您循环浏览自定义WP_Query $query返回的帖子。

在第二个区块$query中没有做任何事情,帖子实际上来自全球$wp_query

让我们看看你提到的三个功能中的每个功能。

rewind_posts() - 这听起来确实如此。在您运行循环后,此函数用于返回到开头,允许您再次运行相同的循环。

wp_reset_postdata() - 在您的第一个代码块中运行自定义WP_Query。这将修改全局$post变量。使用wp_reset_postdata()运行该查询后,将全局$post变量恢复为主查询中的第一个帖子。

wp_reset_query() - 如果您更改全局$wp_query或使用query_posts()(我不建议使用query_posts()),则应使用此选项。它会将$wp_query重置为原始版本。

进一步阅读:

http://codex.wordpress.org/Function_Reference/rewind_posts http://codex.wordpress.org/Function_Reference/wp_reset_postdata http://codex.wordpress.org/Function_Reference/wp_reset_query

答案 1 :(得分:0)

倒带后 - 回到循环开始。通常会清除当前循环。示例

<? Php  
/ / use the cycle for the first time 
if ( have_posts ( )  ) {  while ( have_posts ( ) ) { the_post ( ) ;  ?> 
    < ! - - display information about the post - - > 
<? php  }  }  ?>


    < ! - - any - anything any code - - >


<? Php  
/ / use the cycle for the second time 
/ / rewind to the beginning of the cycle to once again ispolzvoat heve_posts () 
rewind_posts ( ) ; 
if ( have_posts ( )  ) {  while ( have_posts ( ) ) { the_post ( ) ;  ?> 
    < ! - - display information about the post - - > 
<? php  }  }  ?>

您可能不需要wp_reset_query()。 wp_reset_query()取消设置主$ wp_query变量,然后将其重置为$ wp_the_query的值,然后运行wp_reset_postdata()。好吧,如果你没有使用query_posts(),那么你真的不应该像wp_reset_query()那样搞乱主$ wp_query变量。

在自定义WP_Query使用wp_reset_postdata()之后,您需要做的就是将各种全局发布变量重置为原始值。

参考here