文本是《掌握 WP_Query(共19篇)》專題的第 3 篇。閱讀本文前,建議先閱讀前面的文章:
大家好,歡迎來(lái)到“掌握WP_Query”第二部分。在第一部分中,我們學(xué)習(xí)了WP_Query類,在這部分中,我們將要學(xué)習(xí)WP_Query的相關(guān)函數(shù)。
掌握wp_query的強(qiáng)大功能,從函數(shù)(Functions)、行動(dòng)器(Actions)、過(guò)濾器(Filters)著手
我不是編程的專家,但是我知道WP_Query類是MVC模式最好的例子。當(dāng)你掌握了基本知識(shí)后,你會(huì)了解到wp_query功能很強(qiáng)大、容易擴(kuò)展和使用。
除本篇文章之外,我們?cè)趯?lái)可能要用到的方法和參數(shù),WordPresss都提供了另外的函數(shù)和掛鉤(hooks),也就是行動(dòng)器(Actions)、過(guò)濾器(Filters),用來(lái)與WP_Query類共同工作。本教程的下一部分中將會(huì)進(jìn)行介紹與WP_Query相關(guān)的行動(dòng)器(Actions)、過(guò)濾器(Filters)。如果其中有什么問(wèn)題,可以評(píng)論提醒我。
WP_Query 相關(guān)的函數(shù)
下面介紹13個(gè)Wordpress與WP_Query相關(guān)的函數(shù),幫助你掌握WP_Query的強(qiáng)大功能。不需要過(guò)多的辭藻,讓我們開(kāi)始:
獲取公用的查詢參數(shù):get_query_var()
從函數(shù)名的字面義就可以知道:從全局變量$wp_query對(duì)象中,檢索公共變量。有兩個(gè)參數(shù):第一個(gè)返回值,第二個(gè)在第一個(gè)沒(méi)有設(shè)置的情況下返回默認(rèn)值。
<?php
$paged = get_query_var( 'paged', 1 );
?>
關(guān)聯(lián)主循環(huán):query_post()
如實(shí)的講,這是一個(gè)很差勁的函數(shù)。可以完全不用使用它,但是為了講明白“正確的方式”使用它,我們將會(huì)學(xué)習(xí)它,并且告訴你什么是“差勁的功能”。
Query_posts()是用來(lái)與主查詢進(jìn)行替換的,把主查詢放在一邊,并開(kāi)始一個(gè)新的查詢——如之前提到的,需要在查詢完后使用wp_reset_query()。
<?php
query_posts( 'category_name=news' );
?>
這是wordpress中最少用到的函數(shù)。完全可以不使用它去新建一個(gè)查詢——可以直接使用WP_Query類中的get_posts()函數(shù)(后面將要介紹到)。不用使用它去替換主查詢,另外可以使用pre_get_posts 行動(dòng)器(action)來(lái)完成相應(yīng)的操作(后面我們將會(huì)介紹到)。甚至,在wordpress官方文檔中,也不推薦我們?nèi)ナ褂盟?/p>
總之,別用它。
獲取一篇文章:get_post()
另一個(gè)自明其義的函數(shù)是get_post(),可以用來(lái)取一篇文章。有3個(gè)可選參數(shù):
- 第一個(gè)參數(shù)是文章ID(或者是默認(rèn)的當(dāng)前文章)
- 第二個(gè)參數(shù)是獲得文章的類型:對(duì)象OBJECT、關(guān)聯(lián)數(shù)組ARRAY_A或者是數(shù)值數(shù)組ARRAY_N。
- 第三個(gè)參數(shù)是可選的過(guò)濾結(jié)果。如果沒(méi)有設(shè)置默認(rèn)的是“行”row排列,或者你可以設(shè)置成為“編輯”edit,“顯示”display,“歸屬”attribute或者“js”進(jìn)行排列結(jié)果。
<?php
$first_post = get_post( 1, ARRAY_A );
$post_title = $first_post[ 'post_title' ];
?>
保存查詢結(jié)果到數(shù)組中:get_posts()
get_posts()函數(shù)可以運(yùn)行查詢并保存到數(shù)組中,當(dāng)需要在不同的地方使用的時(shí)候,就可以拿出來(lái)使用。需要與WP_Query相同的參數(shù),所以定制你自己喜歡的查詢吧。(我們將會(huì)在之后重新回顧WP_Query的參數(shù),所以請(qǐng)繼續(xù)看教程)get_posts()函數(shù)是最好也是最高效生成文章列表的非loop循環(huán)的功能。
<?php
$args = array(
'category_name' => 'news',
'order' => 'ASC',
'orderby' => 'post_title',
'posts_per_page' => -1
);
// Return an array of all posts in the "news" category.
$all_posts_list = get_posts( $args );
?>
get_posts()函數(shù)可以運(yùn)行查詢并保存到數(shù)組中,當(dāng)需要在不同的地方使用的時(shí)候,就可以拿出來(lái)使用。需要與WP_Query相同的參數(shù),所以定制你自己喜歡的查詢吧。(我們將會(huì)在之后重新回顧WP_Query的參數(shù),所以請(qǐng)繼續(xù)看教程)get_posts()函數(shù)是最好也是最高效生成文章列表的非loop循環(huán)的功能。
獲取頁(yè)面:get_pages()
這個(gè)奇葩的函數(shù)是用來(lái)獲取頁(yè)面的列表的,不僅可以傳遞post_type參數(shù),還可以讓你選擇另一篇文章類型 (前提是這個(gè)文章類型是分層的,否則返回false)。
<?php
$args = array(
'sort_order' => 'ASC',
'sort_column' => 'post_title',
'hierarchical' => 1,
'exclude' => '',
'include' => '',
'meta_key' => '',
'meta_value' => '',
'authors' => '',
'child_of' => 0,
'parent' => -1,
'exclude_tree' => '',
'number' => '',
'offset' => 0,
'post_type' => 'page',
'post_status' => 'publish'
);
$pages = get_pages( $args );
?>
這個(gè)奇葩的函數(shù)是用來(lái)獲取頁(yè)面的列表的,不僅可以傳遞post_type參數(shù),還可以讓你選擇另一篇文章類型 (前提是這個(gè)文章類型是分層的,否則返回false)。
- sort_order: 是否在一個(gè)提升序排列 (asc)或降序排列(desc)。
- sort_column:如何分類頁(yè)面。接受post_title、menu_order post_date post_modified,ID,post_author和post_name參數(shù)。
- hierarchical:是否分層(1)顯示頁(yè)面,不分層(0)
- exclude:用逗號(hào)分隔的列表、頁(yè)面ID數(shù)組,用來(lái)排除get_post生成的列表結(jié)果
- include: 用逗號(hào)分隔的列表、頁(yè)面ID數(shù)組,用來(lái)包含get_post生成的特定頁(yè)面列表
- meta_key: 當(dāng)使用了meta_key參數(shù)時(shí),get_post的結(jié)果只會(huì)顯示有meta_key的頁(yè)面。
- meta_value: 當(dāng)使用了meta_value參數(shù)時(shí),get_post的結(jié)果只會(huì)顯示有meta_value的頁(yè)面。
- authors: 用逗號(hào)分隔的列表作者ID列表。
- child_of: 僅獲取指定ID的子頁(yè)面和孫頁(yè)面。
- parent: 僅獲取指定ID為父頁(yè)面的頁(yè)面,并且需要設(shè)置hierarchical為0,才能正常的返回結(jié)果。
- exclude_tree:用逗號(hào)分隔的列表、頁(yè)面ID數(shù)組,用來(lái)排除get_post獲取子頁(yè)面列表結(jié)果
- number: 獲取頁(yè)面的數(shù)量
- offset: 跳過(guò)從頂部的頁(yè)面數(shù)。
- post_type: 查詢的類型,默認(rèn)是page。(頁(yè)面)
- post_status: 用逗號(hào)分隔的文章?tīng)顟B(tài)列表,使get_post獲取到指定文章?tīng)顟B(tài)的列表。
判斷查詢是否返回了文章:have_posts()
不需要任何參數(shù),如果是查詢到了任何結(jié)果,這個(gè)函數(shù)返回true,否則的話false.
<?php
if ( have_posts() ) {
// Success.
} else {
// Failure.
}
?>
運(yùn)行l(wèi)oop循環(huán):the_post()
官方文檔:the_post()重置了loop循環(huán)中的文章索引,它主要做了以下幾件事:
- 獲取下一個(gè)查詢結(jié)果。
- 建立$post數(shù)據(jù)
- 設(shè)置in_the_loop參數(shù)為T(mén)RUE.
<?php
if ( have_posts() ) {
while ( have_posts() ) {
the_post();
the_title();
the_content();
}
}
?>
建立$post數(shù)據(jù):setup_postdata()
同樣,從字面義上可以理解這個(gè)函數(shù):它建立了全局的文章數(shù)據(jù)。讓我們來(lái)看看官方文檔是怎么說(shuō)的吧:
setup_postdata()給$id, $authordata, $currentday, $currentmonth, $page, $pages, $multipage, $more, $numpages進(jìn)行了賦值,從而使許多模板標(biāo)簽?zāi)軌蚴褂迷诋?dāng)前的文章內(nèi)容中。它并沒(méi)有直接給參數(shù)$post進(jìn)行賦值,但是從某種角度來(lái)說(shuō),是$post參數(shù)的一個(gè)參考。
<?php
global $post;
setup_postdata( $post );
?>
清除當(dāng)前的loop循環(huán):rewind_posts()
另一個(gè)可以從字面上知道其功能的函數(shù)是rewind_posts(),完成了“倒回”循環(huán)的函數(shù),所以在接下來(lái)可以重新運(yùn)行它。
<?php
// After the loop.
rewind_posts();
?>
重置$post:wp_reset_postdata()
此函數(shù)重置了主查詢中的全局變量$post,推薦在第二次查詢之前使用它。
<?php
// After a secondary query.
wp_reset_postdata();
?>
重置查詢: wp_reset_query()
這個(gè)應(yīng)該用來(lái)重置主循環(huán)的查詢(而 query_posts 函數(shù)或 )。pre_get_posts 動(dòng)作鉤子我們將在下一個(gè)部分講解
<?php
// After the main query is altered.
wp_reset_query();
?>
判斷是否當(dāng)前查詢?yōu)橹鞑樵儯篿s_main_query()
這是一個(gè)條件標(biāo)簽,如果當(dāng)前的查詢是主查詢則返回true,否則返回false。簡(jiǎn)單吧?
<?php
if ( is_main_query() ) {
// Success.
} else {
// Failure.
}
?>
判斷是否在loop循環(huán)中:in_the_loop()
另一個(gè)條件標(biāo)簽是in_the_loop(),如果在loop循環(huán)中,則返回true,否則返回false.
<?php
if ( in_the_loop() ) {
// Success.
} else {
// Failure.
}
?>
第二部分完
現(xiàn)在我們了解到了與wp_query相關(guān)的(幾乎)所有函數(shù)!下面的教程中,我們會(huì)介紹WP_Query相關(guān)的行動(dòng)器(actions)和過(guò)濾器(filters)。
如果對(duì)本篇內(nèi)容有任何的疑問(wèn),可以在下方留言!如果你喜歡的話,可以分享到你的朋友圈里!
原文出自:http://code.tutsplus.com/tutorials/mastering-wp_query-related-functions–cms-22951
由 癡空見(jiàn)觀@WordPress大學(xué) 原創(chuàng)翻譯,未經(jīng)允許,禁止轉(zhuǎn)載和采用本譯文。
您已閱讀完《掌握 WP_Query(共19篇)》專題的第 3 篇。請(qǐng)繼續(xù)閱讀該專題下面的文章:
- 4.掌握 WP_Query:行動(dòng)器和過(guò)濾器
- 5.掌握 WP_Query:WP_Query類的屬性和方法
- 6.WP_Query 參數(shù):文章、頁(yè)面和文章類型
- 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)、排序和分頁(yè)
- 12.WP_Query 參數(shù):作者、搜索、密碼、權(quán)限、緩存和返回字段
- 13.掌握 WP_Query:10個(gè)有用的例子
- 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的查詢改進(jìn)
- 19.掌握 WP_Query:結(jié)尾





