當(dāng)前位置:首頁>WordPress建站>WordPress開發(fā)>掌握 WP_Query : 入門介紹

掌握 WP_Query : 入門介紹

通常來說,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_posts
  • get_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ù)做了一個功能演示:

2016-02-04_115715_wpdaxue_com

 

什么時候你可能需要用到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)載和采用本譯文。

聲明:本站所有文章,如無特殊說明或標(biāo)注,均為本站原創(chuàng)發(fā)布。任何個人或組織,在未征得本站同意時,禁止復(fù)制、盜用、采集、發(fā)布本站內(nèi)容到任何網(wǎng)站、書籍等各類媒體平臺。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進行處理。

給TA打賞
共{{data.count}}人
人已打賞
歡迎關(guān)注WordPress大學(xué)公眾號 WPDAXUE
WordPress開發(fā)

50個WordPress過濾鉤子(總結(jié))

2016-1-21 10:47:13

WordPress開發(fā)

掌握 WP_Query:教你使用Loop循環(huán)

2016-2-23 17:23:52

3 條回復(fù) A文章作者 M管理員
  1. jiage

    還是看國人的教程看著舒服,看著還夾雜著生硬翻譯的譯文,著實有點惱火。但還是非常感謝WordPress大學(xué)了,為我們提供了非常好的學(xué)習(xí)平臺!

    • 網(wǎng)站編輯

      多謝支持,老實說,做翻譯是很枯燥的事情,我也是付小費讓網(wǎng)友們幫忙的,免不了有些地方翻譯生硬,如果兄弟外語可以,歡迎加入我們的行列

    • jiage

      額,胡哥(胡歌?哈哈)回復(fù)的還挺快。其實發(fā)表評論的時候,我還以為這個主題教程是國人寫的,沒想到最后看到底部才知道是譯文。這位kanlidy站長的水平還真是厲害。小弟的英語水平超級差,就不獻丑了,哈哈。

?
個人中心
購物車
優(yōu)惠劵
今日簽到
有新私信 私信列表
搜索

潍坊市| 禄丰县| 乌拉特中旗| 全南县| 民乐县| 灌云县| 安国市| 高州市| 东城区| 松潘县| 勃利县| 宁海县| 明水县| 洛南县| 蓝山县| 中江县| 彭阳县| 河北区| 长葛市| 环江| 睢宁县| 滁州市| 太康县| 韶山市| 安顺市| 凤庆县| 崇信县| 饶河县| 东阿县| 华安县| 上饶市| 普兰店市| 长岛县| 凌海市| 平陆县| 奈曼旗| 丹东市| 台东市| 绵阳市| 佛山市| 连云港市|