最近不少小夥伴都開始製作屬於自己的 WordPress 模板了,初次製作 WordPress 模板肯定會遇到不少問題比如需要在特定頁面執行特定程式碼或者是在特定的頁面輸出一段文字或樣式,這裡小編就將所有 WordPress 條件判斷函式都挪列出來,所有的條件判斷標籤都會判斷某個條件是否成立,然後返回 True 或者 False 。此外有些條件判斷標籤還可以使用一些引數進一步的判斷,下面是所有的 WordPress 條件判斷標籤:

is_home()

判斷當前頁面是否為首頁如果是當前頁面是首頁則會返回 true,但是你在後臺設定了首頁靜態頁面作為首頁的話則會返回 false 。

is_front_page()

這個函式和上面的 is_home() 函式的作用也一樣,唯一不同的就是就算你設定了靜態頁面為首頁也恢返回 true 。

is_single()

該函式用來判斷當前頁面是否為文章頁面或者自定義文章型別頁面,並且該頁面是可以附加引數的,下面那是示例程式碼:

//判斷當前文章是否是 id 為 17 的文章。
is_single( '17' )
//判斷當前文章的標題是否是 「Irish Stew」 。
is_single( 'Irish Stew' )
//判斷當前文章的別名 (Slug) 是否為 「beef-stew」 。
is_single( 'beef-stew' )
//傳遞多個引數需要使用陣列。上面條件判斷標籤判斷滿足 id 為 17 、別名為 beef-stew 、標題為 Irish Stew 任意一個條件文章被訪問時返回 True 。
is_single( array( 17, 'beef-stew', 'Irish Stew' ) )
//判斷多個文章的 id,用法同上。
is_single( array( 17, 19, 1, 11 ) )
//判斷多個文章的別名,用法同上。
is_single( array( 'beef-stew', 'pea-soup', 'chili' ) )
//判斷多個文章的標題,用法同上。
is_single( array( 'Beef Stew', 'Pea Soup', 'Chili' ) )

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

is_sticky()

判斷當前文章是否為置頂文章,也可以傳遞引數,大體的使用方法和 is_single() 函式一樣。

is_singular()

判斷是否滿足 is_single 、 is_page 和 is_attachment 的任意一個條件,滿足返回 True 。可以用來判斷任意型別的文章頁面。

is_post_type_archive()

判斷是否為存檔頁面 (時間存檔頁、標籤、分類、自定義分類),當然也可以加上一些引數比如 post_tag,category 來限制當前的存檔頁型別。

comments_open()

判斷評論功能是否開啟,必須用在迴圈中。

pings_open()

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

is_page()

判斷當前是否為頁面型別文章,用法和 is_single 一致。

is_category()

判斷當前頁面是否為分類目錄,以下是部分程式碼示例:

//判斷當前分類頁面的 ID 是否為 9 。
is_category( '9' )
//判斷當前分類頁面的名字是否為 「Stinky Cheeses」 。
is_category( 'Stinky Cheeses' )
//判斷當前分類頁面的別名是否為 「blue-cheese」 。
is_category( 'blue-cheese' )
//用陣列 傳遞引數,在前面的 is_single 裡面講過,作用類似。
is_category( array( 9, 'blue-cheese', 'Stinky cheeses' ) )

沒什麼特別的可講

in_category(73)

判斷當前文章是否屬於某個特定分類目錄 (id 為 73),返回 True 。注意,這裡是 in 而不是 is,與上面的不同,用法和 is_category 類似。

is_tag()

判斷當前頁面是否為標籤頁面,當然可以傳遞引數,和 is_category 用法一致。

has_tag()

判斷當前文章是否有一個標籤,必須用在迴圈中。

is_tax()

判斷當前頁面是否為一個自定義分類的存檔頁面,下面那是用法示例:

//判斷當前頁面是否為一個名為 flavor 自定義分類的存檔頁面。
is_tax( 'flavor' )
//判斷當前自定義分類 flavor 頁面的別名是否為 mild 。
is_tax( 'flavor', 'mild' )
//判斷當前自定義分類 flavor 頁面的頁面是否為 sharp 、 mild 、 extreme 中的一個。
is_tax( 'flavor', array( 'sharp', 'mild', 'extreme' ) )

和 is_category 、 is_tag 用法不同請勿混淆。

has_term()

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

//判斷當前頁面是否是否帶有別名為 green 的自定義分類 color 。
has_term( 'green', 'color' )
//判斷當前頁面是否是否帶有陣列中的自定義分類 color
has_term( array( 'green', 'orange', 'blue' ), 'color' )
is_author()

判斷當前頁面是否是一個作者存檔頁面, 用法示例:

//判斷當前頁面是否為 id 為 4 的作者頁面。
is_author( '4' )
//判斷當前存檔頁面是否是 Vivian(Nickname) 的作者存檔頁面。
is_author( 'Vivian' )
//判斷當前存檔頁面是否屬於 id 為 4,或者名字為 「john-jones」 、 「Vivian」 的作者存檔頁面。
is_author( array( 4, 'john-jones', 'Vivian' ) )
is_date()

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

is_year()

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

is_month()

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

is_day()

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

is_time()

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

is_new_day()

判斷當前頁面是否為當天文章的時間存檔頁。

is_archive()

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

is_search()

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

is_404()

判斷當前頁面是否為 404 頁面

is_paged()

判斷當前頁面是否為分頁。

is_attachment()

判斷當前頁面是否為附件頁。

is_feed()

判斷是否在訂閱頁面。

is_trackback()

判斷 trackback 是否開啟。

is_preview()

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

has_excerpt()

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

in_the_loop()

判斷是否在主迴圈內部。

如果發現一些判斷失效了可能是迴圈未登出造成的全域性變數錯亂問題,可以使用以下函式來登出迴圈:

//使用 WP_Query 建立多個迴圈是使用,不接受任何引數,恢復 $post 全域性變數的資料
wp_reset_postdata();
//使用 query_posts() 自定義迴圈時使用,不接受任何引數,不僅恢復 $post 全域性變數,還會銷燬之前的查詢
wp_reset_query();
//需要重用同一個頁面的查詢結果時使用
rewind_posts();

例項:

$random_post = new WP_query();
$random_post->query('cat=3&showposts=1&orderby=rand');
while ($random_post->have_posts()) : $random_post->the_post();
<a href="<?php%20the_permalink()%20?>" title="<?php the_title(); ?>">
    <img src="<?php%20echo%20get_post_meta($random_post->ID,%20'featured',%20true);%20?>">
</a>
endwhile;
wp_reset_postdata();
<?php query_posts('posts_per_page=3');
if (have_posts()) : while (have_posts()) : the_post(); ?>
<h1><a href="<?php%20the_permalink();%20?>"><?php the_title(); ?></a></h1>
<?php endwhile; endif; ?>
<?php wp_reset_query(); ?>
if (have_posts()) : while (have_posts()) : the_post(); ?>
<h1><a href="<?php%20the_permalink();%20?>"><?php the_title(); ?></a></h1>
<?php endwhile; endif; ?>
<?php rewind_posts(); ?>
<?php while (have_posts()) : the_post(); ?>
<?php the_content(); ?>
<?php endwhile; ?>