Wordpress:多个循环不会倒带
Wordpress: multiple loops won't rewind
我的 Wordpress 网站的一页上有三个循环。每个循环都做一些不同的事情,但我想在底部重用其中一个循环 (loop2)。所以我尝试在我第一次使用它后立即倒回这个循环,但由于某种原因它不起作用,因为第二次它不会再次循环。
这与我在每次循环后调用的wp_reset_postdata
有关吗?我错过了什么?
这是我的代码:
$loop1 = new WP_Query(array(
// some args
));
if( $loop1->have_posts() ) {
while( $loop1->have_posts() ) { $loop1->the_post();
// do something
}
wp_reset_postdata();
}
$loop2 = new WP_Query(array(
// some args
));
if( $loop2->have_posts() ) {
while( $loop2->have_posts() ) { $loop2->the_post();
// do something
}
// REWIND this loop
$loop2->rewind_posts();
wp_reset_postdata();
}
$loop3 = new WP_Query(array(
//some args
));
if( $loop3->have_posts() ) {
while( $loop3->have_posts() ) { $loop3->the_post();
// do something
}
wp_reset_postdata();
}
// HERE WE GO: do the rewinded loop again
if( $loop2->have_posts() ) {
while( $loop2->have_posts() ) { $loop2->the_post();
echo 'Yes! It is working.';
}
wp_reset_postdata();
} else {
echo 'Nope :( Not working...';
}
你应该试试 WP_Query
的 rewind_posts
方法:
$loop2->rewind_posts();
见https://codex.wordpress.org/Class_Reference/WP_Query#Methods_and_Properties
刚发现它确实倒回了帖子。循环有问题,所以它从一开始就没有任何帖子。
为将来遇到此问题的任何人完成此问题:实际上没有必要 rewind_posts()
因为 have_posts()
函数已经在第二个循环开始时倒回帖子(documentation).
使用wp_reset_query(); rewind_posts(); "if(have_posts())" 之前和 "endif;" 之后
nad 使用 wp_reset_postdata;在每个 while 循环完成后。
谢谢
我的 Wordpress 网站的一页上有三个循环。每个循环都做一些不同的事情,但我想在底部重用其中一个循环 (loop2)。所以我尝试在我第一次使用它后立即倒回这个循环,但由于某种原因它不起作用,因为第二次它不会再次循环。
这与我在每次循环后调用的wp_reset_postdata
有关吗?我错过了什么?
这是我的代码:
$loop1 = new WP_Query(array(
// some args
));
if( $loop1->have_posts() ) {
while( $loop1->have_posts() ) { $loop1->the_post();
// do something
}
wp_reset_postdata();
}
$loop2 = new WP_Query(array(
// some args
));
if( $loop2->have_posts() ) {
while( $loop2->have_posts() ) { $loop2->the_post();
// do something
}
// REWIND this loop
$loop2->rewind_posts();
wp_reset_postdata();
}
$loop3 = new WP_Query(array(
//some args
));
if( $loop3->have_posts() ) {
while( $loop3->have_posts() ) { $loop3->the_post();
// do something
}
wp_reset_postdata();
}
// HERE WE GO: do the rewinded loop again
if( $loop2->have_posts() ) {
while( $loop2->have_posts() ) { $loop2->the_post();
echo 'Yes! It is working.';
}
wp_reset_postdata();
} else {
echo 'Nope :( Not working...';
}
你应该试试 WP_Query
的 rewind_posts
方法:
$loop2->rewind_posts();
见https://codex.wordpress.org/Class_Reference/WP_Query#Methods_and_Properties
刚发现它确实倒回了帖子。循环有问题,所以它从一开始就没有任何帖子。
为将来遇到此问题的任何人完成此问题:实际上没有必要 rewind_posts()
因为 have_posts()
函数已经在第二个循环开始时倒回帖子(documentation).
使用wp_reset_query(); rewind_posts(); "if(have_posts())" 之前和 "endif;" 之后 nad 使用 wp_reset_postdata;在每个 while 循环完成后。
谢谢