[WP]カスタム投稿タイプのカテゴリーリストを出力するシンプルな方法

WordPress
スポンサーリンク

カスタム投稿タイプを導入した際、サイドバーなどで特定のカテゴリー(カスタムタクソノミー)の一覧をどのように表示させるのか、迷うことはありませんか?

実は、標準のカテゴリーリスト表示関数であるwp_list_categories()に引数を一つ追加するだけで、この課題は簡単に解決できます。

カスタム投稿タイプに紐づいたカテゴリーリストを出力する最も簡単な方法

wp_list_categories()関数を使用し、taxonomy 引数で対象のスラッグを指定することです。

WordPressの内部処理において、wp_list_categories()は元々標準カテゴリー (category)だけでなく、あらゆるタクソノミーのターム(項目)リストを表示するために設計されています。この関数の第二引数として渡す連想配列に、’taxonomy’ => ‘カスタムタクソノミーのスラッグ’を追加することで、標準カテゴリーを無視し、指定したカスタムタクソノミーのタームのみを抽出できます。これにより、テーマファイルの記述がシンプルになりますし、将来的なメンテナンスコストも抑えられるでしょう。

カスタムタクソノミーを指定した具体的なテンプレートコード例

たとえば、カスタム投稿タイプ「work」に対して、カスタムタクソノミー「work_cat」を設定していると仮定しましょう。

この「work_cat」に属する全ターム(カテゴリー)を、投稿数(カウント)付きでリスト表示させるためのコードは以下の通りです。


wp_list_categories()関数の主要引数と応用

wp_list_categories()はカスタムタクソノミーのリスト表示において、非常にフレキシブルな制御が可能なのが特長です。

覚えておくと便利な主要引数を一覧でまとめてみました。リストの見た目をサクッと変えたいときに、きっと役立ちますよ

タクソノミーの表示を制御する引数


引数名 設定値の例 効果・機能
taxonomy 'work_cat' 必須。表示したいカスタムタクソノミーのスラッグを指定します。
include '3, 5, 8' 特定のタームIDのみをカンマ区切りで指定し、リストに含めます。
exclude '1, 2' 特定のタームIDをリストから除外します。
depth 1 階層表示の深さを指定します(0または1でトップレベルのみを表示)。

リストの表示形式を制御する引数


引数名 設定値の例 効果・機能
orderby 'count' / 'name' タームを投稿数または名前でソートします。
order 'DESC' / 'ASC' ソート順を降順または昇順に設定できます。
style 'list' / 'none' list<ul><li>形式、none<li>タグなしの表示になります。

これらの引数を組み合わせることで、例えば「投稿数の多い順に上位5件だけ表示する」といった、一歩進んだ動的なリスト表示も実現可能でしょう。


リストの表示結果をさらにカスタマイズしたいなら

wp_list_categories()は便利ですが、生成されるHTML構造は ul と li を基調とした決まった形になってしまいます。

より自由度の高いHTMLでリストを構成したいWEBデザイナーの方もいるはずです。

その場合は、get_terms()関数を利用して、直接データベースからタームの情報を取得し、その後はPHPの foreach ループを使ってマークアップを組み立てる方法がおすすめです。


get_terms() を使えば、リンクを div で囲んだり、リストではなくカード形式にしたりと、デザインの自由度がグンと向上するんです。

【まとめ】カスタムタクソノミーリストは怖くない!

カスタム投稿タイプのカテゴリーリスト表示は、wp_list_categories()関数のtaxonomy引数にスラッグを指定するだけで、ほとんどのケースで対応可能です。

課題 最適な関数と引数 特徴
シンプルにリスト表示したい wp_list_categories( array('taxonomy' => 'スラッグ') ) 簡単。HTML構造は固定されるが、投稿数の表示なども容易です。
複雑なデザイン・HTML構造にしたい get_terms( array('taxonomy' => 'スラッグ') ) + foreach 自由度が高い。全ての情報(ID、名前、スラッグなど)を取得できます。

まずはお手軽なwp_list_categories()から試してみて、もしデザイン上の制約が出てきたらget_terms()へ移行するのが良い戦略でしょう。

WordPressでのサイト構築が、少しでも楽になれば嬉しいです!

コメント

タイトルとURLをコピーしました