條件標簽

  1. 主頁
  2. 文檔
  3. WordPress主題開發(fā)手冊
  4. 主題基礎
  5. 條件標簽

條件標簽可以在 WordPress 模板中使用,通常作為 if/else 的判斷條件,來判斷當前頁面是否滿足某個條件,然后根據(jù)判斷結(jié)果顯示對應的內(nèi)容。

該函數(shù)一般返回一個布爾值,如果返回值為 trueif 后面的代碼被執(zhí)行,如果返回 falseelse 后面的代碼被執(zhí)行。

下面的示例代碼中,我們使用 is_user_logged_in() 函數(shù)來判斷用戶是否已經(jīng)登錄,然后根據(jù)用戶的登錄狀態(tài),顯示對應的問候語。

if ( is_user_logged_in() ):
    echo '歡迎,已注冊的朋友!';
else:
    echo '歡迎,匿名朋友!';
endif;

在哪里使用條件標簽

在使用條件標簽之前,條件標簽用來進行判斷的信息必須已經(jīng)從數(shù)據(jù)庫中獲取出來了,也就是 WordPress 查詢已經(jīng)運行過了。如果在 WordPress 獲取到數(shù)據(jù)之前使用條件標簽,條件標簽是不工作的。

請注意:由于 WordPress 的 functions.php 在運行查詢之前加載,如果在這個文件中使用條件標簽,很有可能獲取不到您想要的結(jié)果。

您可以通過三種方法使用條件函數(shù):

  • 模板文件中使用
  • 在 functions.php 中創(chuàng)建一個函數(shù),然后在模板文件中調(diào)用這個函數(shù),或者通過 action 或 filter 掛載函數(shù)

條件標簽詳解

下面是您可以使用的返回結(jié)果為 true?的條件函數(shù),有些條件函數(shù)可以接受參數(shù)。

主頁

is_home()

如果當前頁面為網(wǎng)站首頁,此函數(shù)返回 true,如果閱讀設置里面的主頁設置為了「靜態(tài)頁面」,該函數(shù)只在設置為「你的最新文章」的頁面中返回 true.

is_front_page()

無論在閱讀設置里面設置的是「最新文章」還是「靜態(tài)頁面」,只要當前頁面是網(wǎng)站首頁,此函數(shù)就返回 true。

也就是,該函數(shù)再以下兩種情況下返回 true

  • 博客首頁
  • 「設置 -> 閱讀 -> 首頁顯示 」被設置為「您的最新文章

或者

  • 「設置 -> 閱讀 -> 首頁顯示 」被設置為「 一個靜態(tài)頁 
  • 當前顯示的是上面選擇的靜態(tài)頁面

管理后臺

is_admin()

當您在儀表盤或后臺頁面時,此函數(shù)返回 true。

單個文章頁面

is_single()

當前頁面是文章詳情頁(或附件、自定義文章類型詳情頁)時,返回 true。如果是頁面,則返回 false。

is_single(’17’)

is_single()?還可以通過文章 ID 和其他文章參數(shù)判斷是否為特定的某個文章。當文章 ID 為 17 時,上面的函數(shù)返回 true。

is_single(‘Hello World’)

參數(shù)也可以是文章標題,當前頁面是標題為「Hello World」的文章時,上面的函數(shù)返回 true

is_single(‘hello-world’)

參數(shù)也可以是文章別名,當前頁面是別名為「hello-world」的文章時,上面的函數(shù)返回 true.

is_single( array( 17, ‘beef-stew’, ‘Irish Stew’) )

該函數(shù)的參數(shù)也可以是一個數(shù)組,數(shù)組的元素可以是文章 ID、文章別名、文章名。

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

當顯示的單個文章是文章 ID = 17 或 19 或 1 或 11時,返回true。

is_single( array( ‘beef-stew’, ‘pea-soup’, ‘chilli’) )

當顯示的單個文章是post_name“beef-stew”,post_name“pea-soup”或post_name“chilli”時,返回true。

is_single( array( ‘Beef Stew’, ‘Pea Soup’, ‘Chilli’) )

當顯示的單個文章的post_title是“Beef Stew”,post_title是“Pea Soup”或post_title是“Chilli”時,返回true。

注意:該函數(shù)的參數(shù)不區(qū)分文章 ID、別名或標題,假設我們傳入 17 作為參數(shù),當文章 ID 為 17 或者別名為 17 時,該函數(shù)都返回 true。

文章詳情、頁面、或附件頁面

is_singular()

任何 is_single,is_page 和 is_attachment 為 true 的情況下,這個函數(shù)都返回 true,該函數(shù)還接受一個文件類型名稱作為參數(shù),用來判斷是否為某個文章類型的文章詳情頁。

置頂文章

is_sticky()

如果當前文章在編輯界面被設置了置頂,該函數(shù)返回 true。在循環(huán)中,該函數(shù)可以接受一個文章 ID 作為參數(shù),來判斷某個文章是否置頂,

is_sticky(’17’)

判斷 ID 為 17 的文章是否為置頂文章。在文章循環(huán)中使用時,這個參數(shù)會自動設置,可以省略。

文章類型

get_post_type()

我們可以通過??get_post_type()?來測試當前文章是否為某個文章類型中的文章?。嚴格來說,這不是一個條件函數(shù),但是我們可以拿他返回的結(jié)果來個我們需要判斷的文章類型做對比,如下:

if('book'== get_post_type())...

post_type_exists()

用來判斷某個文章類型是否已經(jīng)被注冊。

文章類型是否分級

is_post_type_hierarchical($post_type)

該函數(shù)用來判斷某個文章類型是否是分級的,比如 WordPress 默認的頁面,有父頁面和子頁面的功能,就說明這個文章類型是分級,那么下面的函數(shù)就會返回 true:

is_post_type_hierarchical('page')

文章類型存檔頁

is_post_type_archive()

用來判斷當前頁面是否為文章類型的列表頁。

is_post_type_archive($post_type)

該函數(shù)接受一個文章類型名稱作為參數(shù),來判斷當前頁面是否為某個文章類型的列表頁。

注意:注冊文章類型時,設置了參數(shù) 'has_archive'=> true?的文章類型才有列表頁。

評論彈出窗口

is_comments_popup()

是否在「評論彈出窗口」中。

任何包含文章的頁面

comments_open()

當前文章允許發(fā)表評論時,返回 true

pings_open()

當前文章允許 ping 時,返回 true

“PAGE”頁面

本節(jié)中使用的「page」指的是WordPress的?頁面,而不是我網(wǎng)站中的任何網(wǎng)頁,或者換言之,指的是內(nèi)置的「頁面」文章類型。

is_page()

當前網(wǎng)頁是「頁面」時。

is_page(’42’)

當前頁面是 ID 為 42 的頁面時,返回 true。

is_page(’About Me’)

當前頁面的標題為「About me」時,返回 true。

is_page(’about-me’)

當前頁面的別名為「About me」時,返回 true。

is_page( array(42,’about-me’,’About Me’))

當前頁面的 ID 是 42,或 post_name 是 「about-me」,或 post_title 是「About Me」 時,返回 true 。

is_page( array(42,54,6) )

當前頁面是 ID 為 42、54 或 6 時,返回 true 。

測試頁面分頁

您可以使用此代碼檢查我們是否位于使用?QuickTag??<!--nextpage-->?分割為多個頁面的文章或頁面的第 n 頁上?。有時候這會很有用,例如,如果您希望僅在分為多個頁面的文章的第一頁上顯示元數(shù)據(jù)。

例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  {
    // 這是一個有分頁的頁面
    }
?>

測試子頁面

WordPress 沒有?is_subpage()?函數(shù),但是您可以使用其他方式來測試當前頁面是否為另外一個頁面的子頁面:

代碼片段1

<?php
   global $post; // 如果在文章循環(huán)外部使用,加上此代碼
   if ( is_page() && $post->post_parent ) {
     // 這是一個子頁面
   } else {
     // 這不是一個子頁面
   }
?>

您可以使用?代碼片段 2?中的代碼創(chuàng)建自己的 is_subpage() 函數(shù)。將其添加到functions.php 文件中。它以與 代碼片段 1 以相同的方式來測試是否為子頁面,但如果有,則返回父頁面的 ID,如果沒有,則返回 false。

代碼片段 2

function is_subpage() {
    global $post;

    if ( is_page() && $post->post_parent ) {
        return $post->post_parent;
    } else {
        return false;
    }
}

如果您需要經(jīng)常測試子頁面,建議使用 代碼片段 2 中的函數(shù),而不是像 代碼片段 1 那樣類每次需要測試時復制。

要測試頁面的父級頁面是否是特定頁面,例如 “About”(頁面 ID 為 2),您可以使用 代碼片段 3 中的測試。這些測試可以檢查您是否正在查看指定頁面或其子頁面。這對于為網(wǎng)站不同部分設置特定的內(nèi)容非常重要,如,您可以為不同的頁面、子頁面設置不同的標題和 Banner。

代碼段3

<?php
if ( is_page( 'about' ) || '2' == $post->post_parent ) {
    // 頁面標題為 "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'; // 在其他頁面中時
}
?>

代碼片段 4 是一個可以讓您更輕松地執(zhí)行上述測試的函數(shù)。如果您正在查看指定頁面(如“About”)或其中一個子頁面(此頁面的父級 ID 為“2”),此函數(shù)將返回 true。

代碼片段4

function is_tree( $pid ) {
    global $post;

    if ( is_page($pid) ){
        return true;
    }

    $anc = get_post_ancestors( $post->ID );

    foreach ( $anc as $ancestor ) {
        if( is_page() && $ancestor == $pid ) {
            return true;
        }
    }

    return false;
}

將 代碼片段 4 添加到主題的 functions.php 文件中,并調(diào)用is_tree(‘id’) 來查看當前頁面是否為頁面,或是頁面的子頁面。在 Snippet 3 中,is_tree(‘2’) 將替換第一個 if 標簽內(nèi)的?"is_page('about') || '2'== $ post-> post_parent"

請注意,如果您有多個頁面級別,則父頁面是當前頁面的直接父頁面,而不是層次結(jié)構(gòu)最頂層的頁面。

是否為頁面模板

WordPress 允許您確定當前頁面是否使用了頁面模板或是否使用了特定的頁面模板。

is_page_template()

是否使用了頁面模板?

is_page_template(‘about.php’)

是否使用了 「about.php」頁面模板?請注意,與其他判斷函數(shù)不同,如果要指定頁面模板,則需要使用文件名,例如 about.phpmy_page_template.php

注意:如果模板文件位于子目錄中,參數(shù)中還需要包含目錄,例如 ‘page-templates/about.php’。

分類頁面

is_category()

顯示 “分類目錄存檔”頁面時,返回 true

is_category(‘9’)

顯示 ID 為 9 的分類目錄存檔頁面時,返回 true

is_category(‘Stinky Cheeses’)

當顯示名稱為 “Stinky Cheeses” 的分類目錄存檔頁面時,返回 true

is_category(’blue-cheese’)

顯示別名為 “blue-cheese” 的分類目錄存檔頁面時,返回 true

is_category( array(9,’blue-cheese’,’Stinky Cheeses’) )

顯示 ID 為 9,或別名為 「blue-cheese」,或名稱為「Stiky Cheeses」的分類目錄存檔頁面時,返回 true。

in_category(‘5’)

如果當前文章在 ID 為 5 的分類目錄中時,返回 true。

in_category(array(1,2,3))

如果當前文章在 ID 為1、2或 3 的分類目錄中時,返回 true。

!in_category( array(4,5,6))

如果當前分類不在 ID 為 4、5 或 6 的分類目錄中時,返回 true。

注意:使用上面的函數(shù)時,一定要注意拼寫,“is” 和 “in” 的區(qū)別很大。

另請參見?is_archive()?和?分類目模板

標簽存檔頁

is_tag()

是否為標簽存檔頁面

is_tag(‘文章類型’)

是否為名稱為「文章類型」的標簽存檔頁面。

is_tag(array(‘sharp’,’mild’,’extreme’))

標簽別名為 “sharp”,“mild” 或 “extreme” 時,返回 true。

has_tag()

當前文章有標簽時,返回 true。必須在文章循環(huán)中使用。

has_tag(‘文章類型’)

當前文章的標簽為“文章類型”時,返回 true。

has_tag( array(‘sharp’,’mild’,’extreme’) )

當前文章有別名為數(shù)組中的任意一個時,返回 true.

另請參見?is_archive()?和?標簽模板

分類法存檔頁

is_tax()

是否為分類法存檔頁面

is_tax(‘flavor’)

顯示為名為 flavor 的分類法存檔頁面時,返回 true。

is_tax(‘flavor’,’mild’)

顯示 Flavor 為 mild 的分類法項目存檔頁面時。

is_tax(‘flavor’,array(‘sharp’,’mild’,’extreme’))

顯示別名為 “sharp”,“mild” 或 “extreme” 的 flavor 分類法項目存檔頁面時,返回 true。

has_term()

檢查當前文章是否包含指定的分類法項目。第一個參數(shù)應該是空字符串。需要分類法項目別名/名稱作為第二個參數(shù)。

has_term(‘green’,’color’)

當前文章有顏色為綠色的分類法項目。

has_term(array(‘green’,’orange’,’blue’),’color’)

當前文章有顏色為綠色、橙色、藍色的分類法項目。

另請參見?is_archive()

注冊分類

taxonomy_exists()

當某個分類法已通過?register_taxonomy()?注冊時,返回 true?。以前的?is_taxonomy()?在3.0版中已棄用。

作者頁面

is_author()

顯示作者存檔頁面時,返回 true。

is_author(‘4’)

顯示 ID 為 4 的作者存檔頁面時,返回 true 。

is_author(‘Vivian’)

顯示昵稱為 “Vivian”的作者的存檔頁面時。

is_author(’john-jones’)

顯示 nicename 為 “john-jones” 的存檔頁面時,返回 true。

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

顯示 ID 4 或 user_nicename 為 “john-jones” 或 昵稱 為 “Vivian” 的作者存檔頁面時,返回 true。

另請參見?is_archive()?和?作者模板

多作者網(wǎng)站

is_multi_author()

當多位作者發(fā)布網(wǎng)站文章時。適用于3.2版。

日期頁面

is_date()

顯示任何日期存檔頁面時,返回 true。

is_year()

顯示年度存檔時,返回 true。

is_month()

何時月度存檔,返回 true。

is_day()

顯示每日存檔時,返回 true。

is_time()

當顯示每小時,“分鐘”或“每秒”存檔時,返回 true。

is_new_day()

確定循環(huán)中當前文章的發(fā)布日期是否與上一篇的不同。

任何存檔頁面

is_archive()

顯示任何類型的存檔頁面時(如分類目錄,標簽,作者和日期存檔),返回 true

搜索結(jié)果頁面

is_search()

顯示搜索結(jié)果頁面存檔時,返回 true。

404 頁面

is_404()

在 “HTTP 404:Not Found” 錯誤發(fā)生時,返回 true。

單附件頁面

is_attachment()

當前頁面為文章或頁面的附件時,返回 true。附件是通過文章編輯器上傳的圖像或其他文件,可以顯示在他們自己的 “頁面” 或模板上。

單頁,單個文章或附件

is_singular()

當以下任何一個函數(shù)返回 true時: is_single() , is_page() 或 is_attachment(),該函數(shù)返回 true。

is_singular(‘book’)

但是文章類型為 ‘book’ 的單頁面時, 返回 true。

is_singular(array(‘newspaper’, ‘book’))

顯示文章類型為 ‘newspaper’ 或 ‘book’ 的單頁面時,返回 true。

訂閱源

is_feed()

當前頁面為訂閱源頁面時,返回 true。該函數(shù)在主題開發(fā)時不常用,一般在 WordPress 內(nèi)部或在插件開發(fā)時使用。

引用

is_trackback()

當請求的頁面是 WordPress 的 Trackback 引擎時,返回 true。該函數(shù)在主題開發(fā)時不常用,一般在 WordPress 內(nèi)部或在插件開發(fā)時使用。

預覽

is_preview()

在預覽模式為查看文章或頁面時,返回 true。

有摘要

has_excerpt()

當前文章有摘要時,返回 true。

has_excerpt()

當 ID 為 42 的文章有摘要時,返回 true。

<?php 
   if ( empty( $post->post_excerpt ) ) {
    // 此文章沒摘要
   } else {
    // 此文章要摘要
  }
?>

其他用法

當您需要隱藏自動摘要,只顯示手動摘要時,可使用以下代碼。

<?php
  if ( !has_excerpt() ) {
      echo '';
  } else {
      the_excerpt();
  }
?>

替換文本或代碼的自動摘要。

<?php
if ( ! has_excerpt() ) {
    // 你的文字或代碼
}
?>

是否已分配導航菜單

has_nav_menu()

注冊的導航菜單位置是否已分配菜單

返回:已分配(true)或未分配(false)

在循環(huán)內(nèi)

in_the_loop()

檢查你是否 “在文章循環(huán)內(nèi)”。這個函數(shù)對于插件開發(fā)者很有用,當我們在循環(huán)中時,這個條件會返回 true。

側(cè)邊欄是否已激活(有小工具)

is_active_sidebar()

檢查指定側(cè)邊欄是否處于活動狀態(tài)(側(cè)邊欄中有小工具)。如果使用側(cè)欄(由名稱,標識或編號標識)中有小工具,則返回 true,否則 false。

當前站點是否為網(wǎng)絡的一部分(多站點)

is_multisite()

檢查當前站點是否在 WordPress MultiSite 安裝中。

主站點(多站點)

is_main_site()

確定站點是否為網(wǎng)絡中的主站點。

網(wǎng)絡管理員(多站點)

is_super_admin()

確定用戶是否是網(wǎng)絡(超級)管理員。

插件是否已激活

is_plugin_active()

檢查插件是否已激活。

子主題

is_child_theme()

檢查當前站點是否正在使用子主題。

主題是否支持一項功能

current_theme_supports()

檢查主題是否支持某項功能。

代碼示例

以下是條件標簽的各種使用示例,演示您可以如何使用這些條件標簽。

文章詳情

此示例演示了如何使用?is_single()設置特定內(nèi)容僅在查看單文章頁面時顯示:

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

這是一個在循環(huán)中使用條件函數(shù)的實例,當您正在查看首頁或單文章頁面時,顯示文章的完整內(nèi)容,其他情況顯示摘要。

if ( is_home() || is_single() ) {
   the_content();
} else {
   the_excerpt();
}

當您需要在除了首頁的其他頁面顯示某些內(nèi)容時,可以使用如下代碼。

<?php 
if ( ! is_home() ) {
 // Insert your markup ...
}
?>

檢查多個條件

您可以使用?PHP運算符?在單個 if 語句中判斷多個條件。當您需要檢查當前頁面是否滿足多個條件時,這種處理方法非常有用。

if ( is_single() || is_page() ) {
 // 如果當前頁面是單文章頁面或頁面詳情時,顯示此處的內(nèi)容
}

if ( is_archive() && ! is_category( 'nachos' ) ) {
 // 如果當前頁面時存檔頁面,單不是 ‘nachos’ 分類時,顯示此處的內(nèi)容
}
if ( $query->is_main_query() && is_post_type_archive( 'products' ) && ! is_admin() ) {
 // 如果當前頁面有一個主查詢,并且為 ‘products’ 文章類型存檔頁面,并且不在管理頁面時,顯示這里的內(nèi)容not in the WordPress admin, then do something special
}
if ( is_post_type_archive( 'movies' ) || is_tax( 'genre' ) || is_tax( 'actor' )  ) {
 // 如果時‘movies’ 文章類型的存檔頁面
 // 或者是 ‘genre’ 分類法的存檔頁面
 // 或者是分類法 ‘a(chǎn)ctor’ 的存檔頁面
}

基于日期的差異

如果有人按日期瀏覽您的網(wǎng)站,讓您使用不同的顏色區(qū)分各個年份的文章:

<?php
if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<h2 id="post-<?php the_ID(); ?>">
    <a href="<?php the_permalink() ?>" rel="bookmark">
        <?php the_title(); ?>
    </a>
</h2>
<small><?php the_time('F jS, Y') ?> by <?php the_author() ?></small>
<?php
if ( is_date() ) {
 if ( date( 'Y' ) != get_the_date( 'Y' ) ) {
 // 這是去年的文章,我們添加一個 “oldentry” 的類
 // so let's style the content using the "oldentry" class
 echo '<div class="oldentry">';
 } else {
 echo '<div class="entry">';
 }
} else {
 echo '<div class="entry">';
}

the_content( 'Read the rest of this entry ?' );
?>
</div>

可變邊欄內(nèi)容

下面的示例根據(jù)用戶訪問的頁面顯示不同的側(cè)邊欄。

<div id="sidebar">
<?php
if ( is_home() ) {
 // 我們在首頁,顯示所有頂級分類的列表
    wp_list_categories( 'optionall=0&sort_column=name&list=1&children=0' );
} elseif ( is_category() ) {
 // 我們在單頁面,顯示所有分類列表
    wp_list_categories( 'optionall=1&sort_column=name&list=1&children=1&hierarchical=1' )
} elseif ( is_single() ) {
 // 我們在單文章頁面,不顯示任何內(nèi)容
} elseif ( is_page() ) {
 // 我們在頁面中,接下來檢查在哪一個頁面
 if ( is_page( 'About' ) ) {
     // 關于我們頁面
     echo "這是關于我們頁面!";
 } elseif ( is_page( 'contact' ) ) {
     echo "這是聯(lián)系我們頁面。";
 } else {
     echo "其他頁面";
 }
} else {
    echo "其他頁面";
}
</div>

友好的 404 頁面

創(chuàng)建一個友好的 404 頁面可以讓用戶更方便的瀏覽網(wǎng)站,如在出現(xiàn) 404 錯誤時,提示用戶返回首頁或搜索。

if ( is_404() ) {
  ehco "當前頁面未找到,請返回首頁或搜索您需要的內(nèi)容。";
}

有時在其他模板(如 sidebar.php)中執(zhí)行的查詢可能會損壞某些條件標記。例如,在 header.php 中,條件標記可以正常工作,但在主題的 footer.php 中不起作用。解決這個問題的訣竅是在頁腳中的條件測試之前放置 wp_reset_query。例如:

<?php
wp_reset_query();
 if ( is_page( '2' ) ) {
  echo 'This is page 2!';
 }
?>

條件標簽函數(shù)索引

函數(shù)參考

這篇文章對您有用嗎? 1
0 條回復 A文章作者 M管理員
    暫無討論,說說你的看法吧
?
個人中心
購物車
優(yōu)惠劵
今日簽到
有新私信 私信列表
搜索

措勤县| 禄劝| 平南县| 鹤庆县| 龙井市| 阿拉尔市| 龙口市| 亚东县| 格尔木市| 长岛县| 浦江县| 津市市| 资源县| 昭平县| 华池县| 紫阳县| 沾益县| 锦屏县| 江北区| 达州市| 青河县| 阿图什市| 九龙坡区| 闽侯县| 大关县| 和龙市| 宁津县| 偃师市| 时尚| 陵川县| 米林县| 睢宁县| 略阳县| 伊通| 建平县| 高平市| 霍州市| 临沧市| 株洲市| 乌审旗| 固原市|