WordPress 判斷函數大全:依頁面類型動態顯示內容
WordPress 提供豐富的條件判斷函數,讓佈景主題開發者能針對不同頁面類型(首頁、文章、分類、作者、歸檔等)輸出差異化內容。本文整理常用判斷函數語法、參數用法與實戰範例。
核心觀念
- 判斷函數回傳
true/false,搭配 if/else 或 ?: 控制輸出。
- 多數函數支援 ID、標題、Slug(別名) 三種參數型態。
- 若在小工具中執行 PHP,需安裝 Exec-PHP 或 PHP Code Widget 外掛(注意安全性)。
一、文章頁面判斷
| 函數 | 說明 | 參數範例 |
is_single() | 是否為單篇文章頁 | is_single()、is_single(2)、is_single('Beef Stew')、is_single('beef-stew') |
is_singular() | 文章/頁面/自訂文章型別(含單頁) | is_singular('product') |
comments_open() | 是否開放留言 | 無參數 |
pings_open() | 是否開放 Pingback/Trackback | 無參數 |
二、頁面判斷
| 函數 | 說明 | 參數範例 |
is_page() | 是否為分頁 | is_page()、is_page(42)、is_page('About Me')、is_page('about-me') |
is_front_page() | 是否為網站首頁(設定靜態首頁時) | 無參數 |
is_home() | 是否為部落格文章索引頁(預設首頁) | 無參數 |
關鍵差異:is_home() 為文章列表頁;is_front_page() 為網站首頁。若「設定 → 閱讀」指定靜態首頁,兩者會不同。
三、分類判斷
| 函數 | 說明 | 參數範例 |
is_category() | 是否為分類存檔頁 | is_category()、is_category(6)、is_category('Cheeses')、is_category('cheeses') |
in_category() | 當前文章是否屬於某分類(用於單篇頁) | in_category(5)、in_category('news') |
is_tax() | 是否為自訂分類法存檔頁 | is_tax('genre') |
四、作者歸檔判斷
| 函數 | 說明 | 參數範例 |
is_author() | 是否為作者存檔頁 | is_author()、is_author(1337)、is_author('Elite Hacker')、is_author('elite-hacker') |
五、日期/時間歸檔判斷
| 函數 | 說明 |
is_date() | 任意日期歸檔頁 |
is_year() | 年份歸檔頁 |
is_month() | 月份歸檔頁 |
is_day() | 日期歸檔頁 |
is_time() | 時間歸檔頁(罕用) |
六、其他常用判斷
| 函數 | 說明 |
is_archive() | 任意歸檔頁(分類、標籤、作者、日期等) |
is_search() | 搜尋結果頁 |
is_404() | 404 找不到頁面 |
is_paged() | 分頁頁面(第 2 頁以後),?paged=2 |
is_attachment() | 附件頁面 |
is_feed() | RSS/Atom Feed 頁面 |
is_trackback() | Trackback 請求 |
is_preview() | 預覽模式 |
is_mobile() | 行動裝置(需 Jetpack 或外掛支援) |
七、實戰範例
範例 1:僅首頁顯示友情連結
<?php if ( is_home() && !is_paged() ) : ?>
<div class="blogroll">
<?php wp_list_bookmarks(); ?>
</div>
<?php endif; ?>
加上 !is_paged() 避免分頁時重複顯示。
範例 2:文章頁隱藏 Google 廣告,改顯示其他廣告
<?php if ( is_single() ) : ?>
<!-- 文章頁專用廣告 -->
<script src="other-ad.js"></script>
<?php else : ?>
<!-- 其他頁面顯示 Google 廣告 -->
<script src="adsense.js"></script>
<?php endif; ?>
範例 3:特定分類使用不同版型
<?php if ( in_category('news') ) : ?>
<?php get_template_part('content', 'news'); ?>
<?php else : ?>
<?php get_template_part('content', get_post_format()); ?>
<?php endif; ?>
範例 4:側邊欄依頁面顯示不同小工具區
<?php if ( is_active_sidebar('sidebar-' . ( is_single() ? 'post' : 'page' )) ) : ?>
<?php dynamic_sidebar('sidebar-' . ( is_single() ? 'post' : 'page' )); ?>
<?php endif; ?>
八、進階技巧
- 組合判斷:
if ( is_category() && !is_paged() )、if ( is_single() || is_page() )。
- 體系類別判斷:
is_post_type_archive('product')、is_singular('product')(WooCommerce 常用)。
- 在 functions.php 中預先計算:
$is_home = is_home(); 避免模板中重複呼叫。
- 區塊編輯器時代:區塊主題可用
has_block()、is_block_template() 等新判斷。
善用 WordPress 判斷函數,能讓佈景主題邏輯清晰、效能優異、維護容易。建議收藏本表,開發時隨查隨用。