通常來說,Wordpress會在你所有展現(xiàn)的網(wǎng)頁上運行query(查詢)功能,查詢不同的屬性決定了你所看到頁面。因此,如果你正在查看一個靜態(tài)頁面,WordPress的運行查詢相關(guān)ID來顯示頁面,而如果歸檔頁面被瀏覽,查詢將檢索該歸檔的所有文章。
但有,有的時候我們需要定制內(nèi)容。這可能是你的文章內(nèi)容部分或其他頁面上的部分(如:側(cè)邊欄或頁腳),顯示一些特定的內(nèi)容,而不是WP默認(rèn)查詢輸出。
有了WP_Query類,這一切都好辦了。WP_Query類提供了大量的參數(shù),你可以去設(shè)置這些參數(shù)來決定什么樣的內(nèi)容將被展示出來(這不僅僅局限于文章頁面)。然后,它會運行一個循環(huán)函數(shù),來循環(huán)展示你所想要展示的內(nèi)容。
《掌握WP_Query》本系列的學(xué)習(xí),共19篇博文。完成本系列的學(xué)習(xí),你會從基礎(chǔ)入門到精通WP_Query,學(xué)會在各種場景下使用WP_Query,輕松使用其完成對Wordpress網(wǎng)站的數(shù)據(jù)庫數(shù)據(jù)檢索/修正功能。
在此文我們將介紹以下內(nèi)容:
- 什么是WP_Query?
- 為什么要使用WP_Query?
- 潛在的問題/有什么要注意的。
什么是WP_Query?
WP_Query是由WordPress提供的一個類。通過WP_Query,你可以輕松的使用已經(jīng)集成到WordPress核心代碼中的變量、判斷和功能,而不必?fù)?dān)心自己編寫所有的代碼。這使你的代碼更高效,更可靠。
如果你是個處女座,想知道WP_Query干了嘛,你可以在includes/query.php中看到它的原碼。(么擔(dān)心啦,無病毒啦~~~全世界那么多同志在使用,嘻嘻)
WP_Query包括四個部分:
- 需要查詢的參數(shù),或者參數(shù)集合。
- 開始查詢。
- 循環(huán)輸出——這將輸出文章內(nèi)容、標(biāo)題或任何你想顯示的內(nèi)容。
- 查詢結(jié)束——通過標(biāo)簽判斷、重置請求數(shù)據(jù)。
下面我們來舉個例子:
<?php
$args = array(
// 用于查詢的參數(shù)或者參數(shù)集合
);
// 自定義查詢
$query = new WP_Query( $args );
// 判斷查詢的結(jié)果
if ( $query->have_posts() ) {
// 通過查詢的結(jié)果,開始主循環(huán)
while ( $query->have_posts() ) {
$query->the_post();
// Contents of the queried post results go here.
}
}
// 重置請求數(shù)據(jù)
wp_reset_postdata();
?>
你可以在查詢的時候去定義需要查詢的參數(shù),但是我們不建議這樣,我們建議:在查詢之前準(zhǔn)備好需要查詢的參數(shù)。保持代碼的簡潔、易讀。
重置請求數(shù)據(jù)
在例子程序中,我們在每次查詢之后添加了wp_reset_postdata()函數(shù),它可以把本次查詢的結(jié)果傳遞到頁面上主查詢中去。
例如,如果你使用WP_Query去展現(xiàn)一組查詢數(shù)據(jù)到側(cè)邊欄里,使用wp_reset_postdata()去告訴WordPress哪個頁面是我們剛剛訪問的頁面,并且傳遞參數(shù)至頁面的主查詢。
如果你不這樣做,其他任何頁面上運行的查詢(包括默認(rèn)查詢)都可能會中止,任何判斷頁面類型的條件標(biāo)簽都不會正常工作。
為什么要使用WP_Query?
如果你沒有使用過WP_Query類,你可能會想為什么要學(xué)習(xí)它。這里我們將從兩個方面進行回答:為什么使用WP_Query 而不使用其他自定義的查詢方法;哪些地方你可能會想到用WP_Query。
為什么使用WP_Query 而不使用其他自定義的查詢方法?
WP_Query不是僅有自定義查詢方法。還有以下四種:
pre_get_postsget_posts()get_pages()query_posts()(不推薦)
以上的方法我們不過多的介紹,但是你有時間去了解一下,也是很有用處的。
- pre_get_post 是一個修改主查詢的hook(掛鉤)。通過條件標(biāo)簽去判斷是否有一個確切類型的頁面已經(jīng)展示了出來(如:主頁),然后使用pre_get_post去修改查詢(如:刪除在某個地方展示的最近的3篇博文)。這是非常高效的方式去修改主查詢,也是首先應(yīng)該想到的。但是,不能使用它去創(chuàng)建一個新的查詢。
get_posts()和get_pages()除了名字不同,功能類似。這些模板類拓展了WP_Query類,用不同的方式做了同一件事件,當(dāng)你在調(diào)用WP_Query類之前,額外的插入了一步,而非直接插入到wp_query中去。當(dāng)且僅當(dāng)查詢文章與頁面的時候使用get_post和get_paget(),而強大的wp_query,可以包含數(shù)據(jù)庫所有的查詢情況。query_posts()可以修改主查詢(不能在插件和主題中使用)。Query_post()會跳出主查詢并重新開始,把主查詢給替換掉。很容易報錯,特別是標(biāo)記頁碼的時候,它會很低效并且使頁面加載時間變長。如果需要修改主查詢,使用pre_get_post吧。如果你是想重新新建一個查詢,請使用wp_query。
在下圖中,Andrey “Rarst” Savchenko 將這幾個函數(shù)做了一個功能演示:

什么時候你可能需要用到WP_Query?
有很多種情況下,使用WP_Query會很有效率。下面盡可能多給大家展示:
- 在當(dāng)前文章的后面添加一個相關(guān)文章的列表——例如:添加一個相關(guān)分類的所有文章的列表。
- 在同一頁面新建2個循環(huán),例如:在FAQ頁面,設(shè)置在問題標(biāo)題處和內(nèi)容的下面。
- 當(dāng)小工具(近期文章)顯示不出你所需要的內(nèi)容(或者你是大牛,自己來寫的除外^_^),那就用WP_Query來新建一個自定義近期文章列表,放到側(cè)邊欄或者網(wǎng)站頁腳。
- 創(chuàng)建分類自定義查詢,使用多個分類區(qū)分要顯示的內(nèi)容。
- 查詢文章類型不能夠由默認(rèn)查詢而輸出的,如:附件生成。
- 由很多種查詢生成自定義的內(nèi)容多樣的頁面,正如示例程序
注意事項
WP_Query很強大,但是它也有缺點:
- 如果是為了改變文章顯示成為特點的類型或者分類,不要用WP_Query。而是,簡單的為新的內(nèi)容或者分類新建一個模板文件,在這個模板文件中設(shè)置主循環(huán)。
- 如果是在一個歸檔中展示一小部分文章(例如:不展示特定的分類文章),不要用wp_query去生成一個總的查詢。而是用pre_get_posts去修改主查詢,利用一些條件標(biāo)簽去定位出你想要修改的內(nèi)容。
- 一定要警惕在頁面上使用過多的查詢。理論上,可以在一個頁面上使用成百上千個查詢,但是請考慮一下你的服務(wù)器的負(fù)載吧。如果說某個頁面需要4到5個查詢工作,那么就考慮做一個新的頁面模板吧。
小結(jié)
WP_Query類是一個強大的豐富的工具,它可以讓你自定義頁面上的查詢,使你的Wordpress網(wǎng)站展現(xiàn)成你所需要的內(nèi)容。同樣,我們也可以使用其他的查詢方法,如文章中所介紹的。
在該系列的剩余部分,我們將介紹如何使用wp_query,并且熟悉掌握它。
原文出自:http://code.tutsplus.com/tutorials/mastering-wp_query-an-introduction–cms-23023
由 癡空見觀@WordPress大學(xué) 原創(chuàng)翻譯,未經(jīng)允許,禁止轉(zhuǎn)載和采用本譯文。
您已閱讀完《掌握 WP_Query(共19篇)》專題的第 1 篇。請繼續(xù)閱讀該專題下面的文章:
- 2.掌握 WP_Query:教你使用Loop循環(huán)
- 3.掌握 WP_Query:相關(guān)的函數(shù)
- 4.掌握 WP_Query:行動器和過濾器
- 5.掌握 WP_Query:WP_Query類的屬性和方法
- 6.WP_Query 參數(shù):文章、頁面和文章類型
- 7.WP_Query 參數(shù):分類和標(biāo)簽
- 8.WP_Query 參數(shù):分類法(Taxonomies)
- 9.WP_Query 參數(shù):自定義字段(Custom Fields)
- 10.WP_Query 參數(shù):日期
- 11.WP_Query 參數(shù):狀態(tài)、排序和分頁
- 12.WP_Query 參數(shù):作者、搜索、密碼、權(quán)限、緩存和返回字段
- 13.掌握 WP_Query:10個有用的例子
- 14.結(jié)合 WP_Query 與主查詢(the Main Query)
- 15.掌握 WP_User_Query
- 16.掌握 WP_Comment_Query
- 17.掌握 WP_Meta_Query 和 WP_Date_Query
- 18.WordPress 4.1的查詢改進
- 19.掌握 WP_Query:結(jié)尾






還是看國人的教程看著舒服,看著還夾雜著生硬翻譯的譯文,著實有點惱火。但還是非常感謝WordPress大學(xué)了,為我們提供了非常好的學(xué)習(xí)平臺!
多謝支持,老實說,做翻譯是很枯燥的事情,我也是付小費讓網(wǎng)友們幫忙的,免不了有些地方翻譯生硬,如果兄弟外語可以,歡迎加入我們的行列
額,胡哥(胡歌?哈哈)回復(fù)的還挺快。其實發(fā)表評論的時候,我還以為這個主題教程是國人寫的,沒想到最后看到底部才知道是譯文。這位kanlidy站長的水平還真是厲害。小弟的英語水平超級差,就不獻丑了,哈哈。