也想出現在這里?聯系我們

wordpress 條件判斷標簽及用法大全

2013.11.17 wordpress教程
  • 文章介紹
  • 升級版本
  • 評價&建議

WordPress 主題和插件開發中,條件判斷標簽(Conditional Tags)是非常重要的,通過條件判斷標簽,我們可以判斷各種情況,從而使用對應的代碼等。例如在頂部導航條中有一個“首頁”選項,在首頁的時候需要設置成高亮,我們可以在頭部導航模板文件(header.php)中使用條件判斷標簽 is_home() 來判斷當前頁面是不是首頁,然后再輸出高亮的 class。

這類的條件判斷標簽一般會返回一個布爾值,這樣我們就可以使用 if 語句判斷不同的頁面不同的情況而分別使用不同的代碼。

所有的條件判斷標簽

所有的條件判斷標簽都會判斷某個條件是否成立,然后返回 True 或者 False 。此外有些條件判斷標簽還可以使用一些參數進一步的判斷,下面是所有的 WordPress 條件判斷標簽:

主頁面(Main)

is_home()

判斷當前頁面是否是博客主頁面。主頁面通常是顯示博客內容列表的首頁,但是如果你在“后臺”->“設置”->“閱讀”中設置了靜態首頁和文章索引頁面的話,當訪問文章索引頁面是返回 True。

首頁(Front)

is_front_page()

判斷當前頁面是否是博客首頁。首頁和上面的主頁面不同,首頁可以是文章索引頁面,也可以是你在“后臺”->“設置”->“閱讀”中設置的靜態首頁。

后臺控制面板(Administration Panels)

is_admin()

判斷當前頁面是否是后臺的控制面板(Dashboard)。

文章頁面(Single Post)

is_single()

判斷當前頁面是否是一篇文章或者是附件頁面或者自定義文章類型頁面。注意,WordPress 中文章(Single)和頁面(Page)是不同的概念。這個條件判斷標簽可以附加參數。

is_single( '17' )

判斷當前文章是否是 id 為 17 的文章。

is_single( 'Irish Stew' )

判斷當前文章的標題是否是 “Irish Stew”。

is_single( 'beef-stew' )

判斷當前文章的別名(Slug)是否為 “beef-stew”。

is_single( array( 17, 'beef-stew', 'Irish Stew' ) )

傳遞多個參數需要使用數組。上面條件判斷標簽判斷滿足 id 為 17 、別名為 beef-stew、標題為 Irish Stew 任意一個條件文章被訪問時返回 True。

is_single( array( 17, 19, 1, 11 ) )

判斷多個文章的 id,用法同上。

is_single( array( 'beef-stew', 'pea-soup', 'chili' ) )

判斷多個文章的別名,用法同上。

is_single( array( 'Beef Stew', 'Pea Soup', 'Chili' ) )

判斷多個文章的標題,用法同上。

注意:這個函數對于傳遞的參數,并無法很明確的判斷參數究竟是 id、文章標題或者是文章別名,如果參數為 17,當 id 為 17 的文章會返回 True,當 Slug 為 17 的文章也會返回 True。

置頂文章(Sticky Post)

is_sticky()

WordPress 帶有置頂文章的功能,使用這個標簽判斷是否為置頂文章,需要傳遞一個參數(通常為文章 id,用法同上)。如果不想傳遞參數,需要用在主循環(Loop)中,由主循環提供。通常的用法是在主循環輸出文章索引列表的時候,使用 is_sticky() 判斷當前文章是否為置頂文章,然后在置頂文章的 title 前面輸出 “[置頂]” 之類的標志。

文章類型(Post Type)

get_post_type()

嚴格意義上,這并不是一個條件判斷標簽,它會返回當前文章注冊的文章類型,并且可以通過類似 if ( 'book' == get_post_type() ) ... 來實現判斷文章類型的功能。

is_singular()

判斷是否滿足 is_singleis_pageis_attachment 的任意一個條件,滿足返回 True。可以測試所有的文章類型。

post_type_exists()

判斷某個文章類型是否被注冊了,需要傳遞一個文章類型參數。它并不是測試某文章是否屬于某個文章類型。

is_post_type_hierarchical( $post_type )

如果 $post_type 在注冊的時候設置了支持層次( 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 可以是一個單一的文章類型或者是一個文章類型數組。提示:如果想要應用文章類型存檔功能,需要在注冊文章類型的時候,將 has_archive 參數設置為 True。

評論相關(Comments)

is_comments_popup()

判斷是否在評論彈出框的窗口中。

comments_open()

判斷評論功能是否開啟,必須用在主循環中。

pings_open()

判斷文章 ping 功能是否開啟,必須用在主循環中。

判斷頁面(Page)

WordPress 中內置的有兩種內容形式,一種是文章(Post)另一種是頁面(Page),這里要判斷的是頁面,而不是指你網站的某個網頁。

is_page()

判斷當前頁面是否為“頁面”。

is_page( 42 )

判斷當前頁面是否是一個 ID 為 42 的頁面。

is_page( 'About Me And Joe' )

判斷當前頁面是否是一個標題為 “About Me And Joe” 的頁面。

is_page( 'about-me' )

判斷當前頁面是否是一個別名為 “about-me” 的頁面。

is_page( array( 42, 'about-me', 'Aout Me And Joe' ) )

一次包含多種情況的判斷,需要使用數組傳遞,用法同上。

判斷內容分頁

在文章和頁面中,有時候內容很多,在文章中插入 <!--nextpage--> 標簽可以將內容分隔開分成不同的頁面,并通過對應的函數獲取分頁的列表。下面的例子,可以判斷當前是在第幾個頁面中,這樣你就可以在某個頁面中輸出一些特別的信息(例如在第一個頁面中,輸出一個提示)。

例子1:

  1. <?php???????????
  2. $paged?=?$wp_query->get(?'page'?);??
  3. ??
  4. if?(?!?$paged?||?$paged?<?2?)?{??
  5. ????//?這里是不帶有分頁或者是帶有分頁頁面的第一頁??
  6. }?else?{??
  7. ???//?這里是帶有分頁的其他頁面。??
  8. }??
  9. ?>??

例子2:

  1. <?php??
  2. $paged?=?get_query_var(?'page'?)???get_query_var(?'page'?)?:?false;??
  3. if?(?$paged?===?false?)?{??
  4. ????//?這里是不帶有分頁或者是帶有分頁頁面的第一頁??
  5. }?else?{??
  6. ???//?這里是帶有分頁的其他頁面。??
  7. }??
  8. ?>??

判斷子頁面(sub-Pages)

WordPress 中的頁面(page)是有父子級關系的,判斷是否為子頁面時,沒有內置 is_subpage() 這樣的函數,但是你可以使用下面的方法來判斷。

方法1:

  1. <?php??
  2. global?$post;?????//?下面代碼需要用在主循環中,如果你在循環外使用,需要聲明全局變量?$post??
  3. ??
  4. if?(?is_page()?&&?$post->post_parent?)?{??
  5. ????//?這是一個子頁面??
  6. }?else?{??
  7. ????//?這不是一個子頁面??
  8. }??
  9. ?>??

建議將下面的方法2加入你的 functions.php 文件中,下面的 is_subpage() 函數的原理與方法1類似,但是可以返回當前頁面父頁面的 ID 或者是 false。

方法2:

  1. <?php??
  2. function?is_subpage()?{??
  3. ????global?$post;??????????????????????????????//?獲取頁面的相關信息??
  4. ????if?(?is_page()?&&?$post->post_parent?)?{???//?判斷是否有父頁面??
  5. ????????return?$post->post_parent;?????????????//?如果有返回父頁面的?ID??
  6. ????}?else?{?????????????????????????????????????
  7. ????????return?false;??????????????????????????//?如果沒有返回?false??
  8. ????}??
  9. }??
  10. ?>??

如果你經常需要判斷子頁面,強烈建議使用方法2。

如果需要判斷父頁面是否為某個特定的頁面,可以使用方法3的代碼。方法3代碼會判斷的更加詳細,從而更加便于自定義和個性化(例如加一些圖片)。

方法3:

  1. <?php??
  2. if?(?is_page(?'about'?)?||?'2'?==?$post->post_parent?)?{??????
  3. ????//?這個頁面是“about”頁面,或者它的父頁面是“about”??
  4. ????$bannerimg?=?'about.jpg';??
  5. }?elseif?(?is_page(?'learning'?)?||?'56'?==?$post->post_parent?)?{????
  6. ????$bannerimg?=?'teaching.jpg';??
  7. }?elseif?(?is_page(?'admissions'?)?||?'15'?==?$post->post_parent?)?{???
  8. ????$bannerimg?=?'admissions.jpg';??
  9. }?else?{???
  10. ????$bannerimg?=?'home.jpg';?//?如果都不滿足的話,就用這個圖片??
  11. }??
  12. ?>??

方法4是一個函數可以讓你更容易的實現判斷,只需要傳遞參數即可,如果正在訪問對應頁面,將會返回 True。

方法4:

  1. <?php??
  2. function?is_tree(?$pid?)?{??????//?$pid?=?傳遞的?ID?參數是我們希望判斷的頁面?ID??
  3. ????global?$post;????????
  4. ??
  5. ????if?(?is_page($pid)?)??
  6. ????????return?true;????????????//?當前正在這個頁面,所以返回?True??
  7. ??
  8. ????$anc?=?get_post_ancestors(?$post->ID?);??
  9. ????foreach?(?$anc?as?$ancestor?)?{??
  10. ????????if(?is_page()?&&?$ancestor?==?$pid?)?{??
  11. ????????????return?true;??
  12. ????????}??
  13. ????}??
  14. ??
  15. ????return?false;??//?沒有在當前頁面,并且這個頁面沒有子頁面??
  16. }??
  17. ?>??

可以將這個函數添加進 functions.php 中,調用 is_tree( 'id' ) 就可以判斷當前頁面是否是指定頁面或者是這個頁面的子頁面。相比較方法3 is_tree( '2' ) 的功能和 is_page( 'about' ) || '2' == $post->post_parent 是一樣的。

注意,如果頁面乘此多于一級,那么父級頁面指的是上一層頁面,不是這個頁面層次關系最頂層的頁面。

判斷頁面模版(Page Template)

判斷當前頁面是否由某個頁面模版生成的,

is_page_template()

判斷是否使用了一個頁面模版。

is_page_template( 'about.php' )

判斷應用的頁面模版是否是 “about” 這個模板。注意,這個參數與其他參數不同,如果你想判斷是否是由某個頁面模版聲稱的,你需要將那個頁面模版的文件名填上去,包括后面的 .php 后綴。

判斷分類頁面(Category)

is_category()

判斷當前頁面是否為分類目錄或者存檔(archive)頁面。

is_category( '9' )

判斷當前分類頁面的 ID 是否為 9。

is_category( 'Stinky Cheeses' )

判斷當前分類頁面的名字是否為“Stinky Cheeses”。

is_category( 'blue-cheese' )

判斷當前分類頁面的別名是否為“blue-cheese”。

is_category( array( 9, 'blue-cheese', 'Stinky cheeses' ) )

同上,你懂的。

in_category( '5' )

判斷當前文章是否屬于某個特定分類目錄(id 為 5),返回 True。注意,這里是 in 而不是 is,與上面的不同。

in_category( array( 1,2,3 ) )

判斷當前文章是否屬于某些特定的分類目錄。

判斷標簽頁面(Tag)

is_tag()

判斷當前頁面是否為標簽頁面。

is_tag( 'mild' )

判斷當前標簽頁面的別名是否為 “mild”。

is_tag( array( 'sharp', 'mild', 'extreme' ) )

判斷當前標簽頁面的別名是否是 “sharp”、“mild”或者“extreme”中的某個。

has_tag()

判斷當前文章是否有一個標簽,必須用在主循環中。

has_tag( 'mild' )

判斷當前文章是否有標簽 “mild”。

has_tag( array( 'sharp', 'mild', 'extreme' ) )

判斷當前文章是否有數組里的那些標簽。

判斷自定義分類頁面(Taxonomy)

自定義分類頁面并非是上面的 category 那種分類頁面,而是指 WordPress 分類系統頁面。在 WordPress 默認內置了兩種分類系統:category 和 tag,同時支持開發者自定義分類系統。

is_tax()

判斷當前頁面是否為一個分類系統的存檔頁面。

is_tax( 'flavor' )

判斷當前頁面是否為一個名為 flavor 自定義分類的存檔頁面。

is_tax( 'flavor', 'mild' )

判斷當前自定義分類 flavor 頁面的別名是否為 mild。

is_tax( 'flavor', array( 'sharp', 'mild', 'extreme' ) )

判斷當前自定義分類 flavor 頁面的頁面是否為 sharp、mild、extreme 中的一個。

has_term()

判斷當前頁面是否帶有自定義分類。

has_term( 'green', 'color' )

判斷當前頁面是否是否帶有別名為 green 的自定義分類 color。

has_term( array( 'green', 'orange', 'blue' ), 'color' )

判斷當前頁面是否是否帶有數組中的自定義分類 color。

判斷作者頁面(Author)

is_author()

判斷當前頁面是否是一個作者存檔頁面。

is_author( '4' )

判斷當前頁面是否為 id 為 4 的作者頁面。

is_author( 'Vivian' )

判斷當前存檔頁面是否是 Vivian(Nickname) 的作者存檔頁面。

is_author( array( 4, 'john-jones', 'Vivian' ) )

判斷當前存檔頁面是否屬于 id 為 4,或者名字為 “john-jones”、“Vivian” 的作者存檔頁面。

is_multi_author()

判斷當前博客是否有超過一個作者發表過文章。WordPress 3.2 以上版本可用。

判斷是否為日期存檔頁面(Date Page)

is_date()

判斷當前頁面是否為任何的按時間存檔的頁面。

is_year()

判斷當前頁面是否為按年份存檔的頁面。

is_month()

判斷當前頁面是否為按月份存檔的頁面。

is_day()

判斷當前頁面是否為按日期存檔的頁面。

is_time()

判斷當前頁面是否為按照小時、分鐘、秒存檔的頁面。

is_new_day()

判斷當前頁面是否為文章日期的新的一天,必須用在主循環中。

判斷任意存檔頁面(Any Archive Page)

is_archive()

判斷當前頁面是否為一個存檔頁面,包括:分類、標簽、作者頁面、日期存檔頁面等。

判斷搜索結果頁面(Search Result Page)

is_search()

判斷當前頁面是否為一個搜索結果頁面。

判斷是否為 404 頁面(404 Not Found Page)

is_404()

判斷當前頁面是否帶有 “HTTP 404:Not Found” 錯誤。

判斷被分頁頁面(Paged Page)

is_paged()

這里的分頁指的是存檔頁面,如果一個日志或者靜態頁面的內容通過通過 <!--nextpage--> 拆分成多個頁面,這些不能算為 paged page

判斷是否為附件頁面(Attachment)

is_attachment()

判斷當前頁面是否為一個附件頁面。附件頁面通常為一個圖片或者是一些其他文件,可以在編輯文章上傳文件那里進行設置。

判斷單頁面、文章頁面或者附件頁面

is_singular()

只要 is_single()is_page()is_attachment() 返回 True,此函數返回 True。

is_singular( 'book' )

判斷當前文章是否屬于自定義文章類型(Custom Post Types)“book”。

is_singular( array( 'newspaper', 'book' ) )

判斷當前文章是否屬于數組中某個自定義文章類型。

判斷訂閱頁面

is_feed()

判斷是否在訂閱輸出的頁面。這個判斷標簽是為插件開發者提供的。

判斷引用通告(Trackback)

is_trackback()

判斷當前 WordPress 主題是否開啟了 Trackback 功能。這個判斷標簽是為開發者提供的。

判斷預覽頁面

is_preview()

判斷一篇文章是否在預覽(文章本身處于草稿狀態)。

判斷是否有摘要

has_excerpt()

判斷當前文章是否有摘要內容。

has_excerpt( 42 )

判斷文章 ID 為 42 的文章是否有摘要內容。

還可以使用下面代碼來實現:

  1. <?php??
  2. //?先獲取全局變量?$post??
  3. global?$post;??
  4. ??
  5. if?(?emptyempty(?$post->post_excerpt?)?)?{??
  6. ????//?如果文章沒有摘要執行這塊代碼??
  7. }?else?{??
  8. ????//?如果文章帶有摘要執行這塊代碼??
  9. }??
  10. ?>??

如果你想在文章沒有摘要的時候,顯示空內容:

  1. <?php?if?(?!?has_excerpt()?)?{??
  2. ??????echo?'';??
  3. }?else?{???
  4. ??????the_excerpt();??
  5. }??

判斷是否有可用的自定義導航菜單

has_nav_menu()

判斷一個被注冊過的自定義導航菜單是否被指定了一個菜單。

判斷是否在主循環中

in_the_loop()

判斷是否在主循環內部。對開發者來說很有用。

判斷邊欄是否已經激活可用

is_active_sidebar()

判斷給出的邊欄是否激活(正在使用)。如果邊欄(用 name、id、number 標志)正在使用,就會返回 True。

判斷是否是網站的一部分(對于多站點網站)

is_multisite()

判斷當前的站點是否是 WordPress MultiSite 的一部分。

判斷是否是主站點(對于多站點網站)

is_main_site()

判斷當前站點在整個網絡中,是否是主站點。

判斷網站的 Admin (對于多站點網站)

is_super_admin()

判斷當前用戶是否是整個網站中的管理員。

判斷插件是否激活

is_plugin_active()

判斷某個插件是否激活正在使用。

判斷子主題

is_child_theme()

判斷當前是否是一個正在使用的子主題。

判斷當前主題功能

current_theme_supports()

判斷當前主題的功能特性是否存在。

使用條件判斷標簽的實例

下面給出一些例子,讓你明白上面的判斷標簽如何使用。

文章中的條件判斷

下面的例子講述了當用戶訪問一篇文章的時候如何使用 is_single() 來顯示一些特殊的內容。

  1. if ( is_single() ) {  
  2.    echo 'This is just one of many fabulous entries in the ' . single_cat_title() . ' category!';  
  3. }  

下面的例子介紹了如何在主循環中使用條件判斷語句。功能是在首頁(index)中顯示文章的摘要,而在文章(single)和主頁(home)中顯示文章的正文內容。

  1. if ( is_home() || is_single() ) {  
  2.    the_content();  
  3. }  
  4. else {  
  5.    the_excerpt();  
  6. }  

同時使用多個條件判斷標簽

使用常見的 PHP 操作符 就可以使用多個條件判斷標簽。

  1. // 同時判斷兩個條件  
  2. if ( is_single() || is_page() ) ) {  
  3. // 如果當前是一篇文章或者一個頁面,就執行這塊代碼  
  4. }  
  5.   
  6. if ( is_archive() && ! is_category( 'nachos' ) ) {  
  7. // 如果當前是一個分類的存檔頁面(除了 nachos 分類),就執行這塊代碼  
  8. }  
  9. // 同時判斷三個條件  
  10. if ( $query->is_main_query() && is_post_type_archive( 'products' ) && ! is_admin() ) {  
  11.     // 如果當前是 main query 并且是 products 自定義文章類型的存檔頁面  
  12.     // 同時沒有用 admin 賬號登陸后臺,就執行這塊代碼  
  13. }  
  14.   
  15. if ( is_post_type_archive( 'movies' ) || is_tax( 'genre' ) || is_tax( 'actor' )  ) {  
  16.     // 如果當前是 Movies 的自定義文章類型存檔  
  17.     // 或者是 genre 分類存檔頁面  
  18.     // 或者是 actor 分類存檔頁面,就執行這塊代碼  
  19. }  
有用4
  • 2013.11.17初次和大家見面了!

已擁有1人對該主題的建議

  1. 0樓
    feiyang:

    你好,請問,如果我想判斷移動主題才執行一段代碼 怎么弄? 求助

    2015-11-12 下午 10:59 [回復]

發表評論

還能輸入240個字

Hi, 歡迎加入Wordpress技術交流群,帶你裝逼帶你飛!

我要入群
也想出現在這里?聯系我們
wordpress加速

我來推薦一個更牛逼的給你看看?

  • 猛戳我吧
夫妇野外交换HD高清版,免费A片在线观看,亚洲精品国产自在现线,中国老妇人60OLDMANTV