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;
#1
你的问题中的两个陈述不相等。
在第一个块中, 你循环浏览自定义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
#2
倒带后退-倒退到循环的开始, 通常清除当前循环。例
<? 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(), 它将各种全局post变量重置为其原始值。
这里参考
评论前必须登录!
注册