カスタム投稿のカテゴリ一覧を表示する方法【WordPress】

コーディング

カスタム投稿のカテゴリー(タクソノミー)を取得して、メニューやサイドバーに各タームをリスト表示する方法です。

  • トップや一覧ページ、記事詳細ページで取得・表示させたい
  • WP管理画面でカテゴリーを追加したり削除したときにも対応させる
  • リンクあり/なしの設定も可能
  • カテゴリ別にクラス名もつけて、CSSで装飾したい

などの時に使えます。

方法【PHP】

たとえばタクソノミースラッグが「categories」、
その中にカテゴリA・カテゴリB・カテゴリCという3つのタームがあるとします。

タクソノミーのタームのイメージ図

①リンクなしでターム一覧をリスト表示する

<ul>
  <?php
    $terms = get_terms('categories');
    foreach ( $terms as $term ) {
      echo '<li>'.$term->name.'</li>';
    }
  ?>
</ul>

「categories」の所には、お使いのタクソノミースラッグを入れてください。

②リンク付きのターム一覧を表示する

<ul>
  <?php
    $terms = get_terms('categories');
    foreach ( $terms as $term ) {
      echo '<li><a href="'.get_term_link($term).'">'.$term->name.'</a></li>';
    }
  ?>
</ul>

get_term_link」で出力されるパーマリンクは、各タームのアーカイブページ(一覧ページ)になります。

③関連記事が0件のタームも表示する

<ul>
  <?php
    $terms = get_terms('categories','hide_empty=0'); //空のタームも出力
    foreach ( $terms as $term ) {
      echo '<li><a href="'.get_term_link($term).'">'.$term->name.'</a></li>';
    }
  ?>
</ul>

たとえばカテゴリBに属する記事が一つも投稿されていないと、①や②の書き方で出力されるのはカテゴリA・カテゴリCになります。

関連記事が0件のカテゴリBも表示させたい時は、「hide_empty=0」を記述します。

④各タームにクラスを追加する

<ul>
  <?php
    $terms = get_terms('categories');
    foreach ( $terms as $term ) {
      echo '<li><a href="'.get_term_link($term).'" '.'class="'.esc_attr($term->slug).'">'.$term->name.'</a></li>';
    }
  ?>
</ul>

出力されるリストにそれぞれクラスをつけて、個別にCSSで装飾したい!
そんなときのために、各タームのスラッグをクラス名として追加する書き方です。

たとえばカテゴリーAのタームスラッグが「category-a」、
カテゴリーBのタームスラッグが「category-b」だとすると、

<ul>
  <li><a href="#" class="category-a">カテゴリーA</a></li>
  <li><a href="#" class="category-b">カテゴリーB</a></li>
</ul>

のように出力されます。