掌握 WP_Query : 入門介紹

WordPress會在你所有展現的網頁上運行query(查詢)功能,查詢不同的屬性決定了你所看到頁面。

因此,如果你正在查看一個靜態頁面,WordPress的運行查詢相關ID來顯示頁面,而如果歸檔頁面被瀏覽,查詢將檢索該歸檔的所有文章。

但有,有的時候我們需要定製內容。這可能是你的文章內容部分或其他頁面上的部分(如:側邊欄或頁腳),顯示一些特定的內容,而不是WP默認查詢輸出。

有了WP_Query類,這一切都好辦了。WP_Query類提供了大量的參數,你可以去設置這些參數來決定什麼樣的內容將被展示出來(這不僅僅侷限於文章頁面)。然後,它會運行一個循環函數,來循環展示你所想要展示的內容。

基礎入門到精通WP_Query,學會在各種場景下使用WP_Query,輕鬆使用其完成對Wordpress網站的數據庫數據檢索/修正功能。

在此文我們將介紹以下內容:

什麼是WP_Query?

為什麼要使用WP_Query?

潛在的問題/有什麼要注意的。

什麼是WP_Query?

WP_Query是由WordPress提供的一個類。通過WP_Query,你可以輕鬆的使用已經集成到WordPress核心代碼中的變量、判斷和功能,而不必擔心自己編寫所有的代碼。這使你的代碼更高效,更可靠。

如果你是個處女座,想知道WP_Query幹了嘛,你可以在includes/query.php中看到它的原碼。

WP_Query包括四個部分:

需要查詢的參數,或者參數集合。

開始查詢。

循環輸出——這將輸出文章內容、標題或任何你想顯示的內容。

查詢結束——通過標籤判斷、重置請求數據。

下面我們來舉個例子:

$args = array(
// 用於查詢的參數或者參數集合
);
 
// 自定義查詢
$query = new WP_Query( $args );
 
// 判斷查詢的結果
if ( $query->have_posts() ) {
 
// 通過查詢的結果,開始主循環
while ( $query->have_posts() ) {
 
$query->the_post();
 
// Contents of the queried post results go here.
 
}
 
}
 
// 重置請求數據
wp_reset_postdata();
 
?>

你可以在查詢的時候去定義需要查詢的參數,但是我們不建議這樣,我們建議:在查詢之前準備好需要查詢的參數。保持代碼的簡潔、易讀。

重置請求數據

在例子程序中,我們在每次查詢之後添加了wp_reset_postdata()函數,它可以把本次查詢的結果傳遞到頁面上主查詢中去。

例如,如果你使用WP_Query去展現一組查詢數據到側邊欄裡,使用wp_reset_postdata()去告訴WordPress哪個頁面是我們剛剛訪問的頁面,並且傳遞參數至頁面的主查詢。

如果你不這樣做,其他任何頁面上運行的查詢(包括默認查詢)都可能會中止,任何判斷頁面類型的條件標籤都不會正常工作。

為什麼要使用WP_Query?

如果你沒有使用過WP_Query類,你可能會想為什麼要學習它。這裡我們將從兩個方面進行回答:為什麼使用WP_Query 而不使用其他自定義的查詢方法;哪些地方你可能會想到用WP_Query。

為什麼使用WP_Query 而不使用其他自定義的查詢方法?

WP_Query不是僅有自定義查詢方法。還有以下四種:

  • pre_get_posts
  • get_posts()
  • get_pages()
  • query_posts() (不推薦)

以上的方法我們不過多的介紹,但是你有時間去瞭解一下,也是很有用處的。

pre_get_post 是一個修改主查詢的hook(掛鉤)。通過條件標籤去判斷是否有一個確切類型的頁面已經展示了出來(如:主頁),然後使用pre_get_post去修改查詢(如:刪除在某個地方展示的最近的3篇博文)。這是非常高效的方式去修改主查詢,也是首先應該想到的。但是,不能使用它去創建一個新的查詢。

get_posts() 和 get_pages()  除了名字不同,功能類似。這些模板類拓展了WP_Query類,用不同的方式做了同一件事件,當你在調用WP_Query類之前,額外的插入了一步,而非直接插入到wp_query中去。當且僅當查詢文章與頁面的時候使用get_post和get_paget(),而強大的wp_query,可以包含數據庫所有的查詢情況。

query_posts() 可以修改主查詢(不能在插件和主題中使用)。Query_post()會跳出主查詢並重新開始,把主查詢給替換掉。很容易報錯,特別是標記頁碼的時候,它會很低效並且使頁面加載時間變長。如果需要修改主查詢,使用pre_get_post吧。如果你是想重新新建一個查詢,請使用wp_query。

在下圖中,Andrey 「Rarst」 Savchenko 將這幾個函數做了一個功能演示:

什麼時候你可能需要用到WP_Query?

有很多種情況下,使用WP_Query會很有效率。下面儘可能多給大家展示:

  • 在當前文章的後面添加一個相關文章的列表——例如:添加一個相關分類的所有文章的列表。
  • 在同一頁面新建2個循環,例如:在FAQ頁面,設置在問題標題處和內容的下面。
  • 當小工具(近期文章)顯示不出你所需要的內容,那就用WP_Query來新建一個自定義近期文章列表,放到側邊欄或者網站頁腳。
  • 創建分類自定義查詢,使用多個分類區分要顯示的內容。
  • 查詢文章類型不能夠由默認查詢而輸出的,如:附件生成。
  • 由很多種查詢生成自定義的內容多樣的頁面,正如示常式序

注意事項

WP_Query很強大,但是它也有缺點:

  • 如果是為了改變文章顯示成為特點的類型或者分類,不要用WP_Query。而是,簡單的為新的內容或者分類新建一個模板文件,在這個模板文件中設置主循環。
  • 如果是在一個歸檔中展示一小部分文章(例如:不展示特定的分類文章),不要用wp_query去生成一個總的查詢。而是用pre_get_posts去修改主查詢,利用一些條件標籤去定位出你想要修改的內容。
  • 一定要警惕在頁面上使用過多的查詢。理論上,可以在一個頁面上使用成百上千個查詢,但是請考慮一下你的服務器的負載吧。如果說某個頁面需要4到5個查詢工作,那麼就考慮做一個新的頁面模板吧。

小結

WP_Query類是一個強大的豐富的工具,它可以讓你自定義頁面上的查詢,使你的Wordpress網站展現成你所需要的內容。同樣,我們也可以使用其他的查詢方法,如文章中所介紹的。

在該系列的剩餘部分,我們將介紹如何使用wp_query,並且熟悉掌握它。

原文:http://code.tutsplus.com/tutorials/mastering-wp_query-an-introduction–cms-23023

Facebook 廣告如何引來高流量?

Slogan 對品牌的價值和意義