1

我的 Wordpress 网站的一页上有三个循环。每个循环都做不同的事情,但我想在底部重用其中一个循环(loop2)。所以我尝试在第一次使用它后立即回退这个循环,但由于某种原因这不起作用,因为第二次它不会再次循环。

它与wp_reset_postdata每个循环后的 I 调用有关吗?我错过了什么?

这是我的代码:

$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...';
}
4

3 回答 3

2

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

为将来遇到这个问题的人完成这个问题:实际上没有rewind_posts()必要,因为该函数已经在第二个循环(文档have_posts()开始时倒回帖子。

于 2015-07-15T15:38:48.700 回答
0

您应该尝试以下rewind_posts方法WP_Query

$loop2->rewind_posts();

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

于 2015-07-15T14:57:35.767 回答
0

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

谢谢

于 2015-07-17T12:49:27.473 回答