在 WordPress 主題和插件開發(fā)中,條件判斷標(biāo)簽(Conditional Tags)是非常重要的,,通過條件判斷標(biāo)簽,,我們可以判斷各種情況,從而使用對(duì)應(yīng)的代碼等,。
這類的條件判斷標(biāo)簽一般會(huì)返回一個(gè)布爾值,,這樣我們就可以使用 if 語句判斷不同的頁面不同的情況而分別使用不同的代碼。
最近都在折騰wordpress,,所以從網(wǎng)上收集了大牛翻譯的WordPress 的官方文檔Conditional Tags,,方便查詢使用,,歡迎收藏本文以備用。
所有的條件判斷標(biāo)簽
所有的條件判斷標(biāo)簽都會(huì)判斷某個(gè)條件是否成立,,然后返回 True 或者 False ,。此外有些條件判斷標(biāo)簽還可以使用一些參數(shù)進(jìn)一步的判斷,下面是所有的 WordPress 條件判斷標(biāo)簽:
主頁面(Main)
is_home()
判斷當(dāng)前頁面是否是博客主頁面,。主頁面通常是顯示博客內(nèi)容列表的首頁,,但是如果你在“后臺(tái)”->“設(shè)置”->“閱讀”中設(shè)置了靜態(tài)首頁和文章索引頁面的話,當(dāng)訪問文章索引頁面是返回 True,。
首頁(Front)
is_front_page()
判斷當(dāng)前頁面是否是博客首頁,。首頁和上面的主頁面不同,首頁可以是文章索引頁面,,也可以是你在“后臺(tái)”->“設(shè)置”->“閱讀”中設(shè)置的靜態(tài)首頁,。
后臺(tái)控制面板(Administration Panels)
is_admin()
判斷當(dāng)前頁面是否是后臺(tái)的控制面板(Dashboard)。
文章頁面(Single Post)
is_single()
判斷當(dāng)前頁面是否是一篇文章或者是附件頁面或者自定義文章類型頁面,。注意,,WordPress 中文章(Single)和頁面(Page)是不同的概念。這個(gè)條件判斷標(biāo)簽可以附加參數(shù),。
is_single( '17' )
判斷當(dāng)前文章是否是 id 為 17 的文章,。
is_single( 'Irish Stew' )
判斷當(dāng)前文章的標(biāo)題是否是 “Irish Stew”。
is_single( 'beef-stew' )
判斷當(dāng)前文章的別名(Slug)是否為 “beef-stew”,。
is_single( array( 17, 'beef-stew', 'Irish Stew' ) )
傳遞多個(gè)參數(shù)需要使用數(shù)組,。上面條件判斷標(biāo)簽判斷滿足 id 為 17 、別名為 beef-stew,、標(biāo)題為 Irish Stew 任意一個(gè)條件文章被訪問時(shí)返回 True,。
is_single( array( 17, 19, 1, 11 ) )
判斷多個(gè)文章的 id,用法同上,。
is_single( array( 'beef-stew', 'pea-soup', 'chili' ) )
判斷多個(gè)文章的別名,,用法同上。
is_single( array( 'Beef Stew', 'Pea Soup', 'Chili' ) )
判斷多個(gè)文章的標(biāo)題,,用法同上,。
注意:這個(gè)函數(shù)對(duì)于傳遞的參數(shù),并無法很明確的判斷參數(shù)究竟是 id,、文章標(biāo)題或者是文章別名,,如果參數(shù)為 17,當(dāng) id 為 17 的文章會(huì)返回 True,,當(dāng) Slug 為 17 的文章也會(huì)返回 True,。
置頂文章(Sticky Post)
is_sticky()
WordPress 帶有置頂文章的功能,使用這個(gè)標(biāo)簽判斷是否為置頂文章,,需要傳遞一個(gè)參數(shù)(通常為文章 id,,用法同上)。如果不想傳遞參數(shù),,需要用在主循環(huán)(Loop)中,,由主循環(huán)提供。通常的用法是在主循環(huán)輸出文章索引列表的時(shí)候,,使用is_sticky()判斷當(dāng)前文章是否為置頂文章,,然后在置頂文章的 title 前面輸出 “[置頂]” 之類的標(biāo)志。
文章類型(Post Type)
get_post_type()
嚴(yán)格意義上,,這并不是一個(gè)條件判斷標(biāo)簽,,它會(huì)返回當(dāng)前文章注冊(cè)的文章類型,并且可以通過類似if ( ‘book’ == get_post_type() ) …來實(shí)現(xiàn)判斷文章類型的功能,。
is_singular()
判斷是否滿足is_single,、is_page和is_attachment的任意一個(gè)條件,滿足返回 True,??梢詼y(cè)試所有的文章類型。
post_type_exists()
判斷某個(gè)文章類型是否被注冊(cè)了,,需要傳遞一個(gè)文章類型參數(shù),。它并不是測(cè)試某文章是否屬于某個(gè)文章類型。
is_post_type_hierarchical( $post_type )
如果 $post_type 在注冊(cè)的時(shí)候設(shè)置了支持層次(hierarchical support)返回 True,。例如:is_post_type_hierarchical( ‘book’ ),。
is_post_type_archive()
判斷是否在任何的自定義文章類型存檔頁面(post type archive)。
is_post_type_archive( $post_type )
判斷是否在$post_type中符合條件的文章類型存檔頁面,,$post_type可以是一個(gè)單一的文章類型或者是一個(gè)文章類型數(shù)組,。提示:如果想要應(yīng)用文章類型存檔功能,需要在注冊(cè)文章類型的時(shí)候,,將 has_archive 參數(shù)設(shè)置為 True,。
評(píng)論相關(guān)(Comments)
is_comments_popup()
判斷是否在評(píng)論彈出框的窗口中。
comments_open()
判斷評(píng)論功能是否開啟,,必須用在主循環(huán)中,。
pings_open()
判斷文章 ping 功能是否開啟,必須用在主循環(huán)中,。
判斷頁面(Page)
WordPress 中內(nèi)置的有兩種內(nèi)容形式,,一種是文章(Post)另一種是頁面(Page),這里要判斷的是頁面,,而不是指你網(wǎng)站的某個(gè)網(wǎng)頁,。
is_page()
判斷當(dāng)前頁面是否為“頁面”。
is_page( 42 )
判斷當(dāng)前頁面是否是一個(gè) ID 為 42 的頁面,。
is_page( 'about Me And Joe' )
判斷當(dāng)前頁面是否是一個(gè)標(biāo)題為 “about Me And Joe” 的頁面,。
is_page( 'about-me' )
判斷當(dāng)前頁面是否是一個(gè)別名為 “about-me” 的頁面,。
is_page( array( 42, 'about-me', 'Aout Me And Joe' ) )
一次包含多種情況的判斷,需要使用數(shù)組傳遞,,用法同上,。
0判斷內(nèi)容分頁
在文章和頁面中,有時(shí)候內(nèi)容很多,,在文章中插入<!–nextpage–>標(biāo)簽可以將內(nèi)容分隔開分成不同的頁面,,并通過對(duì)應(yīng)的函數(shù)獲取分頁的列表。下面的例子,,可以判斷當(dāng)前是在第幾個(gè)頁面中,,這樣你就可以在某個(gè)頁面中輸出一些特別的信息(例如在第一個(gè)頁面中,輸出一個(gè)提示),。
例子1:
<?php $paged = $wp_query->get( 'page' );if ( ! $paged || $paged < 2 ) { // 這里是不帶有分頁或者是帶有分頁頁面的第一頁} else { // 這里是帶有分頁的其他頁面,。}?>
例子2:
<?php$paged = get_query_var( 'page' ) ? get_query_var( 'page' ) : false;if ( $paged === false ) { // 這里是不帶有分頁或者是帶有分頁頁面的第一頁} else { // 這里是帶有分頁的其他頁面。}?>
判斷子頁面(sub-Pages)
WordPress 中的頁面(page)是有父子級(jí)關(guān)系的,,判斷是否為子頁面時(shí),,沒有內(nèi)置 is_subpage() 這樣的函數(shù),但是你可以使用下面的方法來判斷,。
方法1:
<?phpglobal $post; // 下面代碼需要用在主循環(huán)中,,如果你在循環(huán)外使用,需要聲明全局變量 $postif ( is_page() && $post->post_parent ) { // 這是一個(gè)子頁面} else { // 這不是一個(gè)子頁面}?>
建議將下面的方法2加入你的functions.php文件中,,下面的is_subpage()函數(shù)的原理與方法1類似,,但是可以返回當(dāng)前頁面父頁面的 ID 或者是 false。
方法2:
<?phpfunction is_subpage() { global $post; // 獲取頁面的相關(guān)信息 if ( is_page() && $post->post_parent ) { // 判斷是否有父頁面 return $post->post_parent; // 如果有返回父頁面的 ID } else { return false; // 如果沒有返回 false }}?>
如果你經(jīng)常需要判斷子頁面,,強(qiáng)烈建議使用方法2,。
如果需要判斷父頁面是否為某個(gè)特定的頁面,可以使用方法3的代碼,。方法3代碼會(huì)判斷的更加詳細(xì),從而更加便于自定義和個(gè)性化(例如加一些圖片),。
方法3:
<?phpif ( is_page( 'about' ) || '2' == $post->post_parent ) { // 這個(gè)頁面是“about”頁面,,或者它的父頁面是“about” $bannerimg = 'about.jpg';} elseif ( is_page( 'learning' ) || '56' == $post->post_parent ) { $bannerimg = 'teaching.jpg';} elseif ( is_page( 'admissions' ) || '15' == $post->post_parent ) { $bannerimg = 'admissions.jpg';} else { $bannerimg = 'home.jpg'; // 如果都不滿足的話,就用這個(gè)圖片}?>
方法4是一個(gè)函數(shù)可以讓你更容易的實(shí)現(xiàn)判斷,,只需要傳遞參數(shù)即可,,如果正在訪問對(duì)應(yīng)頁面,將會(huì)返回 True,。
方法4:
<?phpfunction is_tree( $pid ) { // $pid = 傳遞的 ID 參數(shù)是我們希望判斷的頁面 ID global $post; if ( is_page($pid) ) return true; // 當(dāng)前正在這個(gè)頁面,,所以返回 True $anc = get_post_ancestors( $post->ID ); foreach ( $anc as $ancestor ) { if( is_page() && $ancestor == $pid ) { return true; } } return false; // 沒有在當(dāng)前頁面,,并且這個(gè)頁面沒有子頁面}?>
可以將這個(gè)函數(shù)添加進(jìn)functions.php中,調(diào)用is_tree( ‘id’ )就可以判斷當(dāng)前頁面是否是指定頁面或者是這個(gè)頁面的子頁面,。相比較方法3is_tree( ‘2’ )的功能和is_page( ‘about’ ) || ‘2’ == $post->post_parent是一樣的,。
注意,,如果頁面乘此多于一級(jí),,那么父級(jí)頁面指的是上一層頁面,,不是這個(gè)頁面層次關(guān)系最頂層的頁面,。
判斷頁面模版(Page Template)
判斷當(dāng)前頁面是否由某個(gè)頁面模版生成的。
is_page_template()
判斷是否使用了一個(gè)頁面模版,。
is_page_template( 'about.php' )
判斷應(yīng)用的頁面模版是否是 “about” 這個(gè)模板,。注意,這個(gè)參數(shù)與其他參數(shù)不同,,如果你想判斷是否是由某個(gè)頁面模版聲稱的,,你需要將那個(gè)頁面模版的文件名填上去,包括后面的 .php 后綴,。
判斷分類頁面(Category)
is_category()
判斷當(dāng)前頁面是否為分類目錄或者存檔(archive)頁面,。
is_category( '9' )
判斷當(dāng)前分類頁面的 ID 是否為 9。
is_category( 'Stinky Cheeses' )
判斷當(dāng)前分類頁面的名字是否為“Stinky Cheeses”,。
is_category( 'blue-cheese' )
判斷當(dāng)前分類頁面的別名是否為“blue-cheese”,。
is_category( array( 9, 'blue-cheese', 'Stinky cheeses' ) )
同上,你懂的,。
in_category( '5' )
判斷當(dāng)前文章是否屬于某個(gè)特定分類目錄(id 為 5),,返回 True。注意,,這里是 in 而不是 is,,與上面的不同。
in_category( array( 1,2,3 ) )
判斷當(dāng)前文章是否屬于某些特定的分類目錄,。
判斷標(biāo)簽頁面(Tag)
is_tag()
判斷當(dāng)前頁面是否為標(biāo)簽頁面。
is_tag( 'mild' )
判斷當(dāng)前標(biāo)簽頁面的別名是否為 “mild”,。
is_tag( array( 'sharp', 'mild', 'extreme' ) )
判斷當(dāng)前標(biāo)簽頁面的別名是否是 “sharp”,、“mild”或者“extreme”中的某個(gè)。
has_tag()
判斷當(dāng)前文章是否有一個(gè)標(biāo)簽,,必須用在主循環(huán)中,。
has_tag( 'mild' )
判斷當(dāng)前文章是否有標(biāo)簽 “mild”。
has_tag( array( 'sharp', 'mild', 'extreme' ) )
判斷當(dāng)前文章是否有數(shù)組里的那些標(biāo)簽,。
判斷自定義分類頁面(Taxonomy)
自定義分類頁面并非是上面的 category 那種分類頁面,,而是指 WordPress 分類系統(tǒng)頁面。在 WordPress 默認(rèn)內(nèi)置了兩種分類系統(tǒng):category 和 tag,,同時(shí)支持開發(fā)者自定義分類系統(tǒng),。
is_tax()
判斷當(dāng)前頁面是否為一個(gè)分類系統(tǒng)的存檔頁面。
is_tax( 'flavor' )
判斷當(dāng)前頁面是否為一個(gè)名為 flavor 自定義分類的存檔頁面,。
is_tax( 'flavor', 'mild' )
判斷當(dāng)前自定義分類 flavor 頁面的別名是否為 mild,。
is_tax( 'flavor', array( 'sharp', 'mild', 'extreme' ) )
判斷當(dāng)前自定義分類 flavor 頁面的頁面是否為 sharp、mild,、extreme 中的一個(gè),。
has_term()
判斷當(dāng)前頁面是否帶有自定義分類。
has_term( 'green', 'color' )
判斷當(dāng)前頁面是否是否帶有別名為 green 的自定義分類 color。
has_term( array( 'green', 'orange', 'blue' ), 'color' )
判斷當(dāng)前頁面是否是否帶有數(shù)組中的自定義分類 color,。
判斷作者頁面(Author)
is_author()
判斷當(dāng)前頁面是否是一個(gè)作者存檔頁面,。
is_author( '4' )
判斷當(dāng)前頁面是否為 id 為 4 的作者頁面。
is_author( 'Vivian' )
判斷當(dāng)前存檔頁面是否是 Vivian(Nickname) 的作者存檔頁面,。
is_author( array( 4, 'john-jones', 'Vivian' ) )
判斷當(dāng)前存檔頁面是否屬于 id 為 4,,或者名字為 “john-jones”、“Vivian” 的作者存檔頁面,。
is_multi_author()
判斷當(dāng)前博客是否有超過一個(gè)作者發(fā)表過文章,。WordPress 3.2 以上版本可用。
判斷是否為日期存檔頁面(Date Page)
is_date()
判斷當(dāng)前頁面是否為任何的按時(shí)間存檔的頁面,。
is_year()
判斷當(dāng)前頁面是否為按年份存檔的頁面,。
is_month()
判斷當(dāng)前頁面是否為按月份存檔的頁面。
is_day()
判斷當(dāng)前頁面是否為按日期存檔的頁面,。
is_time()
判斷當(dāng)前頁面是否為按照小時(shí),、分鐘、秒存檔的頁面,。
is_new_day()
判斷當(dāng)前頁面是否為文章日期的新的一天,,必須用在主循環(huán)中。
判斷任意存檔頁面(Any Archive Page)
is_archive()
判斷當(dāng)前頁面是否為一個(gè)存檔頁面,,包括:分類,、標(biāo)簽、作者頁面,、日期存檔頁面等,。
判斷搜索結(jié)果頁面(Search Result Page)
is_search()
判斷當(dāng)前頁面是否為一個(gè)搜索結(jié)果頁面。
0判斷是否為 404 頁面(404 Not Found Page)
is_404()
判斷當(dāng)前頁面是否帶有 “HTTP 404:Not Found” 錯(cuò)誤,。
判斷被分頁頁面(Paged Page)
is_paged()
這里的分頁指的是存檔頁面,,如果一個(gè)日志或者靜態(tài)頁面的內(nèi)容通過通過<!–nextpage–>拆分成多個(gè)頁面,這些不能算為 paged page
判斷是否為附件頁面(Attachment)
is_attachment()
判斷當(dāng)前頁面是否為一個(gè)附件頁面,。附件頁面通常為一個(gè)圖片或者是一些其他文件,,可以在編輯文章上傳文件那里進(jìn)行設(shè)置。
判斷單頁面,、文章頁面或者附件頁面
is_singular()
只要is_single(),、is_page()、is_attachment()返回 True,,此函數(shù)返回 True,。
is_singular( 'book' )
判斷當(dāng)前文章是否屬于自定義文章類型(Custom Post Types)“book”。
is_singular( array( 'newspaper', 'book' ) )
判斷當(dāng)前文章是否屬于數(shù)組中某個(gè)自定義文章類型,。
判斷訂閱頁面
is_feed()
判斷是否在訂閱輸出的頁面,。這個(gè)判斷標(biāo)簽是為插件開發(fā)者提供的,。
判斷引用通告(Trackback)
is_trackback()
判斷當(dāng)前 WordPress 主題是否開啟了 Trackback 功能。這個(gè)判斷標(biāo)簽是為開發(fā)者提供的,。
判斷預(yù)覽頁面
is_preview()
判斷一篇文章是否在預(yù)覽(文章本身處于草稿狀態(tài)),。
判斷是否有摘要
has_excerpt()
判斷當(dāng)前文章是否有摘要內(nèi)容。
has_excerpt( 42 )
判斷文章 ID 為 42 的文章是否有摘要內(nèi)容,。
還可以使用下面代碼來實(shí)現(xiàn):
<?php// 先獲取全局變量 $postglobal $post;if ( empty( $post->post_excerpt ) ) { // 如果文章沒有摘要執(zhí)行這塊代碼} else { // 如果文章帶有摘要執(zhí)行這塊代碼}?>
如果你想在文章沒有摘要的時(shí)候,,顯示空內(nèi)容:
<?php if ( ! has_excerpt() ) { echo '';} else { the_excerpt();}
判斷是否有可用的自定義導(dǎo)航菜單
has_nav_menu()
判斷一個(gè)被注冊(cè)過的自定義導(dǎo)航菜單是否被指定了一個(gè)菜單。
判斷是否在主循環(huán)中
in_the_loop()
判斷是否在主循環(huán)內(nèi)部,。對(duì)開發(fā)者來說很有用,。
0判斷邊欄是否已經(jīng)激活可用
is_active_sidebar()
判斷給出的邊欄是否激活(正在使用)。如果邊欄(用 name,、id,、number 標(biāo)志)正在使用,就會(huì)返回 True,。
判斷是否是網(wǎng)站的一部分(對(duì)于多站點(diǎn)網(wǎng)站)
is_multisite()
判斷當(dāng)前的站點(diǎn)是否是 WordPress MultiSite 的一部分,。
判斷是否是主站點(diǎn)(對(duì)于多站點(diǎn)網(wǎng)站)
is_main_site()
判斷當(dāng)前站點(diǎn)在整個(gè)網(wǎng)絡(luò)中,是否是主站點(diǎn),。
判斷網(wǎng)站的 Admin (對(duì)于多站點(diǎn)網(wǎng)站)
is_super_admin()
判斷當(dāng)前用戶是否是整個(gè)網(wǎng)站中的管理員,。
判斷插件是否激活
is_plugin_active()
判斷某個(gè)插件是否激活正在使用。
判斷子主題
is_child_theme()
判斷當(dāng)前是否是一個(gè)正在使用的子主題,。
判斷當(dāng)前主題功能
current_theme_supports()
判斷當(dāng)前主題的功能特性是否存在,。
7使用條件判斷標(biāo)簽的實(shí)例
下面給出一些例子,讓你明白上面的判斷標(biāo)簽如何使用,。
文章中的條件判斷
下面的例子講述了當(dāng)用戶訪問一篇文章的時(shí)候如何使用 is_single() 來顯示一些特殊的內(nèi)容,。
if ( is_single() ) { echo 'This is just one of many fabulous entries in the ' . single_cat_title() . ' category!';}
下面的例子介紹了如何在主循環(huán)中使用條件判斷語句。功能是在首頁(index)中顯示文章的摘要,,而在文章(single)和主頁(home)中顯示文章的正文內(nèi)容。
if ( is_home() || is_single() ) { the_content();}else { the_excerpt();}
同時(shí)使用多個(gè)條件判斷標(biāo)簽
使用常見的 PHP 操作符 就可以使用多個(gè)條件判斷標(biāo)簽,。
// 同時(shí)判斷兩個(gè)條件if ( is_single() || is_page() ) ) {// 如果當(dāng)前是一篇文章或者一個(gè)頁面,,就執(zhí)行這塊代碼}if ( is_archive() && ! is_category( 'nachos' ) ) {// 如果當(dāng)前是一個(gè)分類的存檔頁面(除了 nachos 分類),就執(zhí)行這塊代碼}
// 同時(shí)判斷三個(gè)條件if ( $query->is_main_query() && is_post_type_archive( 'products' ) && ! is_admin() ) {// 如果當(dāng)前是 main query 并且是 products 自定義文章類型的存檔頁面// 同時(shí)沒有用 admin 賬號(hào)登陸后臺(tái),,就執(zhí)行這塊代碼}if ( is_post_type_archive( 'movies' ) || is_tax( 'genre' ) || is_tax( 'actor' ) ) {// 如果當(dāng)前是 Movies 的自定義文章類型存檔// 或者是 genre 分類存檔頁面// 或者是 actor 分類存檔頁面,,就執(zhí)行這塊代碼}
注:原文作者:于江水