2009-02-20 130 views
8

似乎有利用其內置的功能,是從WordPress的輸出內容的三種主要方式與WP_Query被推薦之一:什麼是創建自己的Wordpress循環的最佳方法?

什麼他們之間的區別? (我明白WP_Query是這個類,而另外兩個是方法)。

什麼是在同一頁面上有多個循環的最乾淨的方法,而不會相互干擾?

我正在尋找你如何編程你的WP循環的例子; 例如輸出按類別2名獨立的名單後,帶附件,元數據等

這是我迄今發現的最好參考:

回答

5

我已經使用WP_Query和get_posts。在我的側欄模板之一中,我使用以下循環來顯示來自特定類別的帖子,方法是使用包含類別slug或類別名稱的'category_to_load'鍵的自定義字段。真正的區別來自兩種方法的實施。

的get_posts方法看起來像這樣在我的一些模板:

凡WP_Query實施看起來是這樣的:

$blog_posts = new WP_Query('showposts=15'); 

while ($blog_posts->have_posts()) : $blog_posts->the_post(); ?> 

      <div <?php post_class() ?> id="post-<?php the_ID(); ?>" class="blog_post"> 
       <div class="title"> 
        <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2> 
        <span class="date"><?php the_time('F jS, Y') ?> <!-- by <?php the_author() ?> --></span> 
       </div> 
       <div class="entry"> 
        <?php the_content(); ?> 
       </div> 
       <p class="postmetadata"><?php the_tags('Tags: ', ', ', '<br />'); ?> Posted in <?php the_category(', ') ?> | <?php edit_post_link('Edit', '', ' | '); ?> <?php comments_popup_link('No Comments &#187;', '1 Comment &#187;', '% Comments &#187;'); ?></p> 
      </div> 

     <?php endwhile; ?> 

的主要區別是,你不必重新設置全局$ post變量,而且當您使用WP_query時,您也不必通過在每個後期對象上調用setup_postdata($ post)來設置發佈數據。您還可以使用WP_Query函數上可愛的have_posts()函數,該函數不能使用get_posts()。

除非您真的想要,否則不應該使用query_posts()函數,因爲它會修改頁面的主循環。請參閱docs。所以如果你正在構建一個特殊的頁面來顯示你的博客,那麼調用query_posts可能會弄亂頁面的循環,所以你應該使用WP_Query。

這只是我的兩美分。我的最終建議是,你的首選應該是WP_Query。

-Chris

+0

你將如何訪問後的孩子(附件,修訂等)。這是一個單獨的查詢嗎? – meleyal 2009-02-23 15:46:25

3

從WP文檔的get_posts:

get_posts()也可以接受query_posts()可以使用的參數,因爲這兩個函數現在都在內部使用相同的數據庫查詢代碼。

兩個功能之間的唯一區別是,get_posts返回與交記錄數組,而query_posts由模板函數(has_posts,the_post等)存儲在檢索查詢對象的記錄。

它們都使用WP_Query對象來執行查詢。

創建第二個循環包含在Wordpress docs中。有一些鏈接可用於多個循環的其他示例。你會注意到每個人都有不同的表現,但他們對他們的結果都很滿意。

1

WP用來主循環稱爲$wp_query的對象。我們平時看不到此對象,因爲它的背後隱藏着have_posts()the_post()如果你想修改你的循環之前應使用query_posts()主循環僅用於 $wp_query->have_posts()$wp_query->the_post()

包裝。

如果您想要另一個循環,您可以在新循環之前使用query_posts()重新使用$wp_query對象。如果需要,這可以做很多次。

如果由於某種原因,您需要保留$ wp_query對象,那麼應該使用WP_Query。當然,因爲have_posts()the_post()$wp_query對象的包裝,所以不能在WP_Query中使用它們。你還是使用$your_query_obj->have_posts()

$sidebar= WP_Query('category_name= sidebar'); 

while($sidebar->have_posts()): $sidebar->the_post(); 
    the_title(); 
    the_content(); 
endwhile; 

一個很好的情況下WP_Query能比query_posts()更好的是左側邊欄。 由於側邊欄的代碼循環可能會放在主循環的頂部,因此query_posts()調用將更改$wp_query對象並更改主循環。在這種情況下,在側邊欄代碼中使用query_posts(),您還需要在主循環前使用query_posts()來查詢該循環的正確內容。

因此,在這種情況下使用WP_Query將保持$ wp_query,因此主循環不變。

但同樣,爲了一個共同的情況query_posts()是查詢您的內容一個美麗的方式:

query_posts('category_name=blog'); 

while(have_posts()): the_post(); 
    the_title(); 
    the_content(); 
endwhile; 
相關問題