wp_list_categories() 是 WordPress 核心函數,用於輸出或回傳分類連結列表。雖然內建小工具已涵蓋常見需求,但掌握此函數能實現更精細的客製化輸出,特別在主題開發與特殊版面需求時不可或缺。
wp_list_categories( $args );
$args 可為查詢字串或關聯陣列,完整參數如下:
| 參數 | 型態 | 預設值 | 說明 |
|---|---|---|---|
| show_option_all | string | '' | 顯示「所有分類」連結的文字,空則不顯示 |
| orderby | string | 'name' | 排序依據:name、id、slug、count、term_group |
| order | string | 'ASC' | 升序 ASC 或降序 DESC |
| style | string | 'list' | 'list' 輸出 ul>li,'none' 輸出 br 分隔 |
| show_count | bool|int | 0 | 是否顯示文章數量(括號內) |
| hide_empty | bool|int | 1 | 1 隱藏無文章分類,0 顯示所有 |
| use_desc_for_title | bool|int | 1 | 1 以分類描述作為 title 屬性,0 使用名稱 |
| child_of | int | 0 | 只顯示指定分類 ID 的子分類 |
| feed | string | '' | 顯示 RSS 連結文字,空則不顯示 |
| feed_type | string | '' | RSS 類型(rss2、atom 等) |
| feed_image | string | '' | RSS 連結使用的圖片網址 |
| exclude | string | '' | 排除的分類 ID,逗號分隔 |
| exclude_tree | string | '' | 排除整個分類樹(父+所有子孫),逗號分隔 |
| include | string | '' | 只包含指定分類 ID,逗號分隔 |
| hierarchical | bool | true | true 顯示階層結構,false 扁平化 |
| title_li | string | __('Categories') | 列表標題文字,空字串則不輸出標題 |
| show_option_none | string | __('No categories') | 無分類時顯示的文字 |
| number | int | null | 限制顯示分類數量 |
| echo | bool|int | 1 | 1 直接輸出,0 回傳字串 |
| depth | int | 0 | 顯示層級深度,0 無限制,1 只頂層,n 第 n 層 |
| current_category | int | 0 | 強制加上 current-cat 類別的分類 ID |
| pad_counts | bool|int | 0 | 文章數是否包含子分類文章數(需 hierarchical=true) |
| taxonomy | string | 'category' | 分類法名稱(支援自訂分類法) |
| walker | object | null | 自訂 Walker 類別實例,極度客製化輸出結構 |
當 hierarchical=true 且 show_count=true 時,pad_counts=true 會將子分類的文章數累加到父分類計數中。預設為 false,父分類僅顯示直屬文章數。
不限於預設「分類」,傳入自訂分類法 slug(如 'genre'、'product_cat')即可輸出對應術語列表,極大擴展應用範圍。
繼承 Walker_Category 或 Walker 類別,覆寫 start_el()、end_el() 等方法,可產出任意 HTML 結構(如 Bootstrap 選單、JSON 格式等)。
<ul>
<?php wp_list_categories( 'orderby=name&include=3,5,9,16' ); ?>
</ul>
<ul>
<?php wp_list_categories( 'include=5,9,23&title_li=<h2>' . __( 'Poetry' ) . '</h2>' ); ?>
</ul>
<?php
$args = array(
'taxonomy' => 'genre',
'orderby' => 'name',
'show_count' => 0,
'pad_counts' => 0,
'hierarchical' => 1,
'title_li' => '',
);
?>
<ul>
<?php wp_list_categories( $args ); ?>
</ul>
wp_list_categories( array(
'depth' => 1,
'hide_empty' => 1,
'show_count' => 1,
'title_li' => '',
'style' => 'none', // 不用 ul>li,改用 br 分隔
) );
$cats_html = wp_list_categories( array(
'echo' => 0,
'style' => 'list',
'title_li' => '',
'hierarchical' => false,
) );
// 可對 $cats_html 進行字串替換、正則處理後再輸出
echo $cats_html;
title_li='':預設會輸出「分類」標題 li,導致結構多一層,客製化版面時通常需設為空字串hide_empty=0.current-cat 設定樣式new My_Category_Walker() 而非類別名稱get_terms() 取得分類資料,預設快取機制下效能良好熟練運用 wp_list_categories() 的豐富參數,能精準掌控分類列表的輸出結構與內容,是 WordPress 主題開發者的核心技能之一。