个性化阅读
专注于IT技术分析

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

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变量重置为其原始值。

这里参考

赞(0)
未经允许不得转载:srcmini » WordPress:rewind_posts(),wp_reset_postdata()和wp_reset_query()之间的区别

评论 抢沙发

评论前必须登录!