WordPress中查詢文章的循環(huán)Loop結(jié)構(gòu)及用法分析
WordPress 上獲取文章最重要的就是循環(huán)(Loop),事實(shí)上循環(huán)就是去數(shù)據(jù)庫(kù)查詢到相應(yīng)的文章,然后暫時(shí)儲(chǔ)存到全局變量里邊,需要的時(shí)候一篇一篇的輸出出來(lái),WordPress 的循環(huán)設(shè)計(jì)的非常好,完成一次循環(huán)需要執(zhí)行 2000 多行代碼,而你在使用循環(huán)的時(shí)候看到的只是一個(gè)簡(jiǎn)單 while 循環(huán)加上幾個(gè)函數(shù),初學(xué)者也很好理解。
<?php
if( have_posts() ):
while( have_posts() ):
the_post();
endwhile;
endif;
?>
上邊就是一個(gè)普通的主循環(huán)結(jié)構(gòu),首先用 have_posts() 函數(shù)判斷是否有文章,有則用 while 語(yǔ)句循環(huán),在循環(huán)體里邊調(diào)用 the_posts() 函數(shù),the_posts() 函數(shù)用來(lái)告訴 WordPress 核心的查詢類(lèi),已經(jīng)查過(guò)一篇文章了,每調(diào)用一次 the_posts(),循環(huán)中的當(dāng)前文章就會(huì)改變。
當(dāng)調(diào)用幾次 the_posts() 之后,文章已經(jīng)全部循環(huán)完畢,就讓 have_posts() 函數(shù)返回 False 來(lái)結(jié)束循環(huán),所以,一個(gè)普通的循環(huán)應(yīng)該是這樣的:
<?php if( have_posts() ): ?>
<ul>
<?php while( have_posts() ):the_post();?>
<li <?php post_class(); ?>>
<?php the_title( '<h3>', '</h3>' ); ?>
</li>
<?php endwhile; ?>
</ul>
<?php endif; ?>
WP_Query類(lèi)
循環(huán)中所用到的方法都是來(lái)自于WP_Query類(lèi),這里再對(duì)WP_Query類(lèi)做一下科普:
WP_Query 類(lèi)的功能包括處理查詢條件、去數(shù)據(jù)庫(kù)獲取文章、整理和儲(chǔ)存文章、文章循環(huán)、根據(jù)文章查詢條件判斷頁(yè)面類(lèi)型。
屬性
$query
傳入的查詢條件。
$query_vars
處理 $query 得到的可以使用的查詢條件。
$queried_object
根據(jù)查詢類(lèi)型給出的查詢歸屬。比如如果是根據(jù)分類(lèi)查詢,那么返回一個(gè)包含分類(lèi)信息的類(lèi);如果是標(biāo)簽頁(yè)則返回包含標(biāo)簽信息的類(lèi);作者頁(yè)等以此類(lèi)推。
$queried_object_id
返回 $queried_object 的 ID.比如分類(lèi)就是分類(lèi) ID;標(biāo)簽就是標(biāo)簽 ID;以此類(lèi)推。
$posts
從數(shù)據(jù)庫(kù)中查詢到的文章和文章信息被以數(shù)組的形式儲(chǔ)存在這個(gè)變量里,每篇文章是一個(gè)從 WP_Post 類(lèi)實(shí)例化的對(duì)象。
$post_count
當(dāng)前文章數(shù)量,換句話說(shuō)就是 $posts 變量里存儲(chǔ)了幾篇文章。
$found_posts
統(tǒng)計(jì)如果不啟用分頁(yè)會(huì)有多少文章。
$max_num_pages
總頁(yè)數(shù),當(dāng)前文章被分成幾頁(yè)。
$current_post
當(dāng)前文章的索引值。在循環(huán)中,開(kāi)始循環(huán) $current_post 為 –1,每循環(huán)一次則加 1,它表示當(dāng)前循環(huán)到的文章在 $posts 變量(數(shù)組)中的索引值。
$post
循環(huán)中當(dāng)前的文章,是一個(gè)包含文章和文章信息通過(guò) WP_Post 類(lèi)實(shí)例化的對(duì)象。
$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
根據(jù)查詢條件判斷當(dāng)前是什么頁(yè)面,然后儲(chǔ)存在些變量里,詳情可以參考 《 WordPress 頁(yè)面判斷函數(shù) 》。
方法
init()
初始化對(duì)象,所有屬性設(shè)置為 null、-1、0 或 False,刪除一些屬性。
parse_query( $query )
解析并保存查詢字符串。
parse_query_vars()
在之前的 WordPress 版本中和 parse_query() 一樣的功能,現(xiàn)在直接調(diào)用 parse_query() 就好了。
get( $query_var )
根據(jù)名字獲取一個(gè)查詢條件。
set( $query_var, $value )
設(shè)置一個(gè)查詢條件。
get_posts()
根據(jù)現(xiàn)有的查詢條件去數(shù)據(jù)庫(kù)獲取文章,并保存在 $posts 屬性里,同時(shí)設(shè)置好 $post_count 屬性。此函數(shù)的返回值就是存儲(chǔ)文章的 $posts 屬性。
next_post()
(循環(huán)控制)將 $current_post 加 1,也就是把當(dāng)前文章向前推進(jìn)一篇,同時(shí)把推進(jìn)后的當(dāng)前文章添加到 $post 屬性里,然后返回 $post 屬性。
the_post()
(循環(huán)控制)進(jìn)入下一篇文章,調(diào)用 next_post() 函數(shù),然后把推進(jìn)后的當(dāng)前文章導(dǎo)入到全局變量里邊。
have_posts()
(循環(huán)控制)判斷循環(huán)是否完成,如果所有文章都循環(huán)完畢或者根本就沒(méi)有文章則返回 False.
rewind_posts()
(循環(huán)控制)跳到循環(huán)開(kāi)頭。相當(dāng)于重置 $current_post 屬性和 $post 屬性。
query( $query )
查詢文章,包括調(diào)用 init() 方法、parse_query() 方法和 get_posts() 方法,并返回 get_posts() 方法的返回值,用此函數(shù)可以完成一個(gè)文章查詢的完整操作。
get_queried_object()
生成 $queried_object 屬性,如果已經(jīng)存在則直接返回 $queried_object 屬性,所以說(shuō),因?yàn)槟J(rèn) $queried_object 是不存在的,想要調(diào)用 $queried_object 屬性一定要直接使用 get_queried_object() 方法。
get_queried_object_id()
生成 $queried_object_id 屬性,如果已經(jīng)存在則直接返回 $queried_object_id 屬性。類(lèi)似 get_queried_object() 方法。
WP_Query( $query = '' ) , __constructor( $query = '' )
WP_Query 類(lèi)的構(gòu)造函數(shù),實(shí)例化類(lèi)的時(shí)候自己調(diào)用,如果你傳入一個(gè)查詢條件,它會(huì)自動(dòng)調(diào)用 query() 方法幫你查詢文章。
- WordPress開(kāi)發(fā)中用于獲取近期文章的PHP函數(shù)使用解析
- 在WordPress中使用wp_count_posts函數(shù)來(lái)統(tǒng)計(jì)文章數(shù)量
- WordPress特定文章對(duì)搜索引擎隱藏或只允許搜索引擎查看
- WordPress中限制非管理員用戶在文章后只能評(píng)論一次
- WordPress中卸載插件以及移除文章類(lèi)型組件的代碼示例
- 在WordPress的文章編輯器中設(shè)置默認(rèn)內(nèi)容的方法
- WordPress中用于獲取文章信息以及分類(lèi)鏈接的函數(shù)用法
- WordPress中用于獲取文章作者與分類(lèi)信息的方法整理
- 判斷、添加和刪除WordPress置頂文章的相關(guān)PHP函數(shù)小結(jié)
- WordPress中重置文章循環(huán)的rewind_posts()函數(shù)講解
相關(guān)文章
PHP基于socket實(shí)現(xiàn)的簡(jiǎn)單客戶端和服務(wù)端通訊功能示例
這篇文章主要介紹了PHP基于socket實(shí)現(xiàn)的簡(jiǎn)單客戶端和服務(wù)端通訊功能,可實(shí)現(xiàn)服務(wù)端接收客戶端發(fā)送的字符串進(jìn)行翻轉(zhuǎn)操作后返回客戶端的功能,需要的朋友可以參考下2017-07-07
微信公眾平臺(tái)開(kāi)發(fā)-微信服務(wù)器IP接口實(shí)例(含源碼)
本文主要介紹了微信公眾平臺(tái)開(kāi)發(fā)中的微信服務(wù)器IP接口實(shí)例,具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-03-03
利用瀏覽器的Javascript控制臺(tái)調(diào)試PHP程序
現(xiàn)在,越來(lái)越多的瀏覽器都有了開(kāi)發(fā)這工具或者Javascript控制臺(tái),通過(guò)這些工具,我們可以很方便的顯示PHP代碼中的變量或數(shù)組值2014-01-01
本地計(jì)算機(jī)無(wú)法啟動(dòng)Apache故障處理
安裝了WMAP后,一直無(wú)法運(yùn)行成功。后發(fā)現(xiàn)Apache一直都不在運(yùn)行狀態(tài)。到WMAP中的Apache選項(xiàng)中去選擇啟動(dòng)但無(wú)法啟動(dòng)。下面總結(jié)下處理此問(wèn)題的幾種思路方法2014-08-08
PHP之將POST數(shù)據(jù)轉(zhuǎn)化為字符串的實(shí)現(xiàn)代碼
今天來(lái)分享一個(gè)方便我們做LOG日志記錄的自定義函數(shù),需要將POST數(shù)據(jù)轉(zhuǎn)化為字符串,需要的朋友可以參考下2016-11-11
調(diào)整優(yōu)化您的LAMP應(yīng)用程序的5種簡(jiǎn)單方法
Wikipedia、Facebook 和 Yahoo! 等主要 web 屬性使用 LAMP 架構(gòu)來(lái)為每天數(shù)百萬(wàn)的請(qǐng)求提供服務(wù),而 Wordpress、Joomla、Drupal 和 SugarCRM 等 web 應(yīng)用程序軟件使用其架構(gòu)來(lái)讓組織輕松部署基于 web 的應(yīng)用程序。2011-06-06
詳解WordPress中簡(jiǎn)碼格式標(biāo)簽編寫(xiě)的基本方法
這篇文章主要介紹了詳解WordPress中簡(jiǎn)碼格式標(biāo)簽編寫(xiě)的基本方法,文中講到了添加和移除簡(jiǎn)碼等的一些PHP函數(shù)的用法,需要的朋友可以參考下2015-12-12
如何通過(guò)Apache在本地配置多個(gè)虛擬主機(jī)
這篇文章主要介紹了如何通過(guò)Apache在本地配置多個(gè)虛擬主機(jī),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07

