2017-02-03 38 views
1

我花了一段時間閱讀WordPress Codex以及各種主題,並且可以看到一些開發者在博客循環中的endif;之後插入<?php wp_reset_postdata(); ?>,而其他人在博客循環的endwhile;endif;之間插入代碼。我已經嘗試了兩個地點,但還沒有看到區別。有沒有正確的位置?我應該放置wp_reset_postdata();在此之後;或endif; ?

回答

0

wp_reset_postdata()如果你有一個二次迴路(你正在運行一個頁面上附加查詢)時,才需要。該函數的目的是將全局post變量恢復回主查詢中的當前帖子。

實施例:

<?php if (have_posts()) : while (have_posts()) : the_post(); ?> 

    OUTPUT MAIN POSTS HERE 

<?php endwhile; endif; ?> 

在上面的代碼我只使用主循環來顯示訊息。沒有理由包含wp_reset_postdata()。全球職位變量正是它應該是。

如果頁面上的其他地方我決定添加一個二級循環,那麼我需要wp_reset_postdata()

// This query is just an example. It works but isn't particularly useful. 
$secondary_query = new WP_Query(array(
    'post_type' => 'page' 
)); 

if ($secondary_query->have_posts()) : 

    // Separating if and while to make answer clearer. 
    while ($secondary_query->have_posts()) : $secondary_query->the_post(); 

     // OUTPUT MORE STUFF HERE. 

    endwhile; 

    wp_reset_postdata(); 

endif; 

要回答你原來的問題:它通常是endwhileendif之前。這是對the_post()的調用,它實際上改變了全局帖子變量。如果沒有帖子,那麼帖子變量保持不變,並且沒有理由使用重置功能。

+0

謝謝Nathan Dawson。非常感激。 – Craig

1

這個功能應該重置您運行secondery查詢..功能the_post是讓你使用,你可以在迴路中像the_title()the_content等上運行的所有功能..

所以你重置the_post功能和endwhile;之後,您可以重置它。如果你願意,也可以在if的陳述中使用你的主查詢。

<?php 
// this is the main query check if there is posts 
if (have_posts()) : 
    // loop the main query post and run the_post() function on each post that you can use the function the_title() and so on.. 
    while (have_posts()) : the_post(); 
     the_title(); // title of the main query 

     // the is second query 
     $args = array('posts_per_page' => 3); 
     $the_query = new WP_Query($args); 
     // check if there is a posts in the second query 
     if ($the_query->have_posts()) : 
      // run the_post on the second query now you can use the functions.. 
      while ($the_query->have_posts()) : $the_query->the_post(); 
       the_title(); 
       the_excerpt(); 
      endwhile; 

      // reset the second query 
      wp_reset_postdata(); 

      /* here we can use the main query function already if we want.. 
      its in case that you want to do something only if the second query have posts. 
      You can run here third query too and so on... 
      */ 

      the_title(); // title of the main query for example 

     endif; 

    endwhile; 
endif; 
?> 
+0

謝謝你的回覆Shibi。我是否明白了'have_posts'是主要查詢,'the_post'是次要查詢?考慮到這一點,我是否通過插入'<?php wp_reset_postdata(); ''在'end'之後''(就像在你的例子中一樣),我會阻止'<?php the_title(); ?>'和'<?php the_excerpt();從繼續進入我的下一個Blog Loop,我應該放置一個嗎? – Craig

+0

我編輯了一些評論的代碼,試圖幫助你更好地理解它。 – Shibi

+0

謝謝Shibi。不完全是100%肯定,但肯定指出我在正確的方向。我將使用你的上述評論,幫助我完成我的編碼,並希望這將完成我的理解。 – Craig

相關問題