Short version:
正如Tom J Nowell所说,
如果没有东西要清理,你就不应该清理
Long version:
然而,如果你把
wp_reset_postdata()
在循环之后(或在循环之外),它仍然可以很好地工作。我在各种场景中使用过该功能,包括:
dynamic_sidebar( \'main-sidebar\' );
wp_reset_postdata();
原因是一些小部件在查询帖子时没有清理自己。
请记住要重置哪个查询。以汤姆为例,不管wp_reset_postdata
在if
语句,一旦调用它,就会出现问题,因为它将直接返回到主帖子,而不是父自定义循环。
函数的作用是告诉WP_Query
对象将当前帖子还原到全局范围。因为它是一个函数而不是一个方法,所以它只处理一个对象-全局$wp_query
的实例WP_Query
对象
如果有自定义循环,则使用新生成的WP_Query
, 您应该使用reset_postdata
该查询的方法:
$pages = new WP_Query( \'post_type=page\' );
while( $pages->have_posts() ) {
$pages->the_post();
// Page title
echo \'<h1>\'; the_title(); echo \'</h1>\';
$books = new WP_Query( \'post_type=book&...\' );
if( $books->have_posts() ) {
while( $books->have_posts() ) {
$books->the_post();
// Book title
echo \'<li>\'; the_title(); echo \'</li>\';
}
// Don\'t go back to the global post, go back to the "page"
// wp_reset_postdata();
$pages->reset_postdata();
}
// Page content
the_content();
}
// Finally, reset the main query
wp_reset_postdata();
希望这能总结一下:)