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;
答案 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