Wordpress:多个循环不会倒带

时间:2015-07-15 14:41:38

标签: php wordpress 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...';
}

3 个答案:

答案 0 :(得分:1)

刚刚发现它确实倒了帖子。循环有问题所以它从一开始就没有任何帖子。

要为将来绊倒它的人完成这个问题:实际上没有必要rewind_posts()因为have_posts()函数已经在第二个循环开始时回复帖子({{3 }})。

答案 1 :(得分:0)

您应尝试使用rewind_posts的{​​{1}}方法:

WP_Query

请参阅https://codex.wordpress.org/Class_Reference/WP_Query#Methods_and_Properties

答案 2 :(得分:0)

使用wp_reset_query(); rewind_posts();在“if(have_posts())之前”和“endif”之后 nad使用wp_reset_postdata;每个while循环完成后。

由于