在循环内循环 - wordpress

时间:2016-10-26 10:48:42

标签: php wordpress

在显示单个帖子的页面上,我还希望显示一些精选帖子。

特色帖子分配了一个元值,以区分特色和非特色帖子。

问题是我希望在我的页面中间显示特色帖子,但循环从顶部开始,直到页面底部才完成。

来自WP docs:

<?php
    // The main query.
    if (have_posts()) {
      while (have_posts()) {
        the_post();
        the_title();                                                             
        the_content();                                                          
      } # End while loop                                                             
    } else {                                                                      
        // When no posts are found, output this text.                           
        _e( 'Sorry, no posts matched your criteria.' );                         
    }                                                                  
    wp_reset_postdata();                                                        

    /*                                                                          
     * The secondary query. Note that you can use any category name here. In our example,
     * we use "example-category".                                               
    */                                                                        

    $secondary_query = new WP_Query( 'category_name=example-category' );        

      // The second loop. 
    if ($secondary_query->have_posts()) {
      echo '<ul>';
        // While loop to add the list elements.
        while ($secondary_query->have_posts()) {
            $secondary_query->the_post();
            echo '<li>' . get_the_title() . '</li>';
        }
      echo '</ul>';
    }
wp_reset_postdata();
?>

在第一个循环结束时,你必须调用wp_reset_postdata(),但在我的场景中,有些数据需要在页面下方进一步检索,所以我无法在那里结束。

我基本上需要这样做但是只有特色帖子才能呈现而不是帖子本身。

if (have_posts()) {

    while (have_posts()) { 
      the_post();
      the_title();                                                             
      the_content();                                                         

      //Display featured posts half way through
      $secondary_query = new WP_Query( 'category_name=example-category' );
      //end featured post loop
      wp_reset_postdata(); 

      //continue outputting data from first loop 
      the_title();
    } # End while loop.                                                                 

} else {                                                     
    // When no posts are found, output this text.                           
    _e( 'Sorry, no posts matched your criteria.' );                         
}

//finally end inital loop                                                        
wp_reset_postdata(); 

是否可以“暂停”循环以执行不同的循环,然后在以后再次将其重新选回?

1 个答案:

答案 0 :(得分:1)

Normaly你的第二个代码示例应该可行。您不必调用wp_reset_postdata()来结束主循环,只需调用它来结束辅助循环。

  

使用此函数在使用新WP_Query的辅助查询循环之后恢复主查询循环的全局$ post变量。它将$ post变量恢复到主查询中的当前帖子。

您也可以使用 get_posts()

$secondary = get_posts( array(
    'posts_per_page'   => 5,        
    'category_name'    => 'example-category',
    'orderby'          => 'date',
    'order'            => 'DESC',       
    'meta_key'         => 'featured_posts',
    'meta_value'       => 'yes',
    'post_type'        => 'post',       
    'post_status'      => 'publish',        
) );

if ( count( $secondary ) ) {
    echo '<ul>';
    foreach ( $secondary as $entry ) {
        // print_r( $entry ); exit;
        echo '<li>' . $entry->post_title . '</li>';
    }
    echo '</ul>';
}