我之前在 《WordPress 文章迴圈 (Loop) 》一文基本的說明瞭關於 WordPress 文章迴圈的內容,文章的獲取和迴圈都是透過一個名為 WP_Query 的類完成的。

WP_Query 類的功能包括處理查詢條件、去資料庫獲取文章、整理和儲存文章、文章迴圈、根據文章查詢條件判斷頁面型別。

用法

由於用法太過複雜,而需要經常查閱,所以我單獨放到了一篇文章裡:https://www.weixiaoduo.com/wp_query-directions/

屬性

$query

傳入的查詢條件。

$query_vars

處理 $query 得到的可以使用的查詢條件。

$queried_object

根據查詢型別給出的查詢歸屬。比如如果是根據分類查詢,那麼返回一個包含分類資訊的類;如果是標籤頁則返回包含標籤資訊的類;作者頁等以此類推。

$queried_object_id

返回 $queried_object 的 ID. 比如分類就是分類 ID;標籤就是標籤 ID;以此類推。

$posts

從資料庫中查詢到的文章和文章資訊被以陣列的形式儲存在這個變數裡,每篇文章是一個從 WP_Post 類例項化的物件。

$post_count

當前文章數量,換句話說就是 $posts 變數裡儲存了幾篇文章。

$found_posts

統計如果不啟用分頁會有多少文章。

$max_num_pages

總頁數,當前文章被分成幾頁。

$current_post

當前文章的索引值。在迴圈中,開始迴圈 $current_post 為 –1,每迴圈一次則加 1,它表示當前迴圈到的文章在 $posts 變數 (陣列) 中的索引值。

$post

迴圈中當前的文章,是一個包含文章和文章資訊透過 WP_Post 類例項化的物件。

$is_single, $is_page, $is_archive, $is_preview, $is_date, $is_year, $is_month, $is_time, $is_author, $is_category, $is_tag, $is_tax, $is_search, $is_feed, $is_comment_feed, $is_trackback, $is_home, $is_404, $is_comments_popup, $is_admin, $is_attachment, $is_singular, $is_robots, $is_posts_page, $is_paged

根據查詢條件判斷當前是什麼頁面,然後儲存在些變數裡,詳情可以參考 《WordPress 頁面判斷函式》 。

方法

init()

初始化物件,所有屬性設定為 null 、-1 、 0 或 False,刪除一些屬性。

parse_query( $query )

解析並儲存查詢字串。

parse_query_vars()

在之前的 WordPress 版本中和 parse_query() 一樣的功能,現在直接呼叫 parse_query() 就好了。

get( $query_var )

根據名字獲取一個查詢條件。

set( $query_var, $value )

設定一個查詢條件。

get_posts()

根據現有的查詢條件去資料庫獲取文章,並儲存在 $posts 屬性裡,同時設定好 $post_count 屬性。此函式的返回值就是儲存文章的 $posts 屬性。

next_post()

(迴圈控制) 將 $current_post 加 1,也就是把當前文章向前推進一篇,同時把推進後的當前文章新增到 $post 屬性裡,然後返回 $post 屬性。

the_post()

(迴圈控制) 進入下一篇文章,呼叫 next_post() 函式,然後把推進後的當前文章匯入到全域性變數裡邊。

have_posts()

(迴圈控制) 判斷迴圈是否完成,如果所有文章都迴圈完畢或者根本就沒有文章則返回 False.

rewind_posts()

(迴圈控制) 跳到迴圈開頭。相當於重置 $current_post 屬性和 $post 屬性。

query( $query )

查詢文章,包括呼叫 init() 方法、 parse_query() 方法和 get_posts() 方法,並返回 get_posts() 方法的返回值,用此函式可以完成一個文章查詢的完整操作。

get_queried_object()

生成 $queried_object 屬性,如果已經存在則直接返回 $queried_object 屬性,所以說,因為預設 $queried_object 是不存在的,想要呼叫 $queried_object 屬性一定要直接使用 get_queried_object() 方法。

get_queried_object_id()

生成 $queried_object_id 屬性,如果已經存在則直接返回 $queried_object_id 屬性。類似 get_queried_object() 方法。

WP_Query( $query = '' ) , __constructor( $query = '' )

WP_Query 類的建構函式,例項化類的時候自己呼叫,如果你傳入一個查詢條件,它會自動呼叫 query() 方法幫你查詢文章。

其它

更多關於文章查詢的內容:https://www.weixiaoduo.com/tag/query

此類位於:wp-includes/query.php