親カテゴリは出力せずに子カテゴリ名だけ出力する@WordPress
親カテゴリ名は表示せず、子カテゴリ名だけを出力する例です。テンプレートはcategory.phpです。(どのテンプレートでも実現出来るwp_list_categoriesタグを使ったやり方は後述します)
どういうときに使えるかというと、例えば建築施工会社さんのサイトで、事例タイプがいくつかあり、そのいずれかに分類される施工の案件、現場(○○邸とか)があったとします。
新築物件
└A様邸
└B様邸
リフォーム
└C様邸
└D様邸
事例タイプ(例えば新築物件とか、リフォームとか)は各現場の関係性を持たせるために利用しているだけなので(関連物件、案件などで)親カテゴリ名は必要とせず、子カテゴリ名の「現場名」だけを表示させたいと。実際にあった依頼です。
前置きが長い割にコードは短いのですが、以下になります。
<?php $cats = get_the_category(); foreach($cats as $cat): if($cat->parent) echo $cat->cat_name; endforeach; ?>
get_the_category()関数を使ってforeachで回してますが、これ、どこでどう調べてこの記述になったのか記憶が定かでありません。なんでこれで子カテゴリ名だけを出力できているんだろう?実際出来ているんですが。
テンプレートタグwp_list_categoriesを使う
こちらはもっと分かりやすいです。カテゴリーリストを出力するwp_list_categoriesにオプションを指定するやり方です。
wp_list_categoriesは(どこで呼び出しても)デフォルトは全カテゴリーリストを表示します。
<?php wp_list_categories('child_of=1&title_li='); /* 親カテゴリは除外 */ ?>
「child_of」で除外したい親カテゴリをIDで指定します。(title_li=は、不要な文字出力を無効化してます)
カテゴリIDはそのカテゴリの編集画面に進み、ブラウザのURLにある「category&tag_ID=」で示されている数字です。
この数字(カテゴリID)をchild_of=で指定すると、そのカテゴリ(親)は除外して、その子カテゴリ以下(孫があれば孫も)を出力してくれます。