WordPressで投稿した記事の属するカテゴリー表示は色んなところで使用するので覚えておきたい内容です。
それぞれの記事はカテゴリー選択が1つの場合、複数カテゴリーを選択している場合があります。
また、カテゴリーが階層化している場合、記事の親カテゴリーを表示させたり、最上部のカテゴリー(祖先カテゴリー)を表示させたいということはよくあるので是非参考にしてください。
カテゴリー情報の取得にはget_the_category()を使用します。
カテゴリー情報には様々な内容が含まれていて、表示させたい項目を指定することで情報を取り出します。
では、基本的な使い方と主に使用する項目を見ていきましょう。
基本的な使い方
<?php
//カテゴリー情報を取得
$category = get_the_category();
//カテゴリー名を表示
echo $category[0]->name;
//スラッグを表示
echo $category[0]->slug;
//カテゴリーリンク
echo get_category_link( $category[0]->term_id );
?>
$categoryのあとに[0]と付いているのは何ですか?

カテゴリーは複数選択できるので[0]を付けることで先頭カテゴリーのみを表示させることができるんだ。1つのカテゴリーを選択しても取得する情報は配列になっているので[0]を付けるのを忘れないようにしよう!

カテゴリー選択が1つとも限らないので、事前に複数カテゴリーの選択を想定した作りなんですね。

色んな場合を想定して制作することでレイアウトが崩れることを防ぐことができるよ!
ちなみに、すべてのカテゴリーを表示させる方法は次で紹介しているので確認してみて。
カテゴリー情報
| 項目 | 説明 | 
|---|---|
| term_id | カテゴリーID | 
| name | カテゴリー名 | 
| slug | カテゴリーのスラッグ | 
| description | カテゴリーの説明 | 
| parent | 親カテゴリーのID | 
| count | カテゴリーに登録されている投稿の数 | 
| cat_ID | カテゴリーID(term_idと同じ) | 
| category_count | カテゴリーに登録されている投稿の数(countと同じ) | 
| category_description | カテゴリーの説明(descriptionと同じ) | 
| cat_name | カテゴリー名(nameと同じ) | 
| category_nicename | カテゴリースラッグ名(slugと同じ) | 
| category_parent | 親カテゴリーのID(parentと同じ) ※親がなければ0が入る | 
カテゴリーをすべて表示する
複数のカテゴリーを選択している場合は、カテゴリー情報を取得した後にforeach文を使用して選択した分だけ繰り返し(ループ)処理を行うことで1つ1つの情報を取り出すことができます。
<?php
//カテゴリー情報を取得
$cats = get_the_category();
//取得したすべてのカテゴリーをループ処理
foreach( $cats as $cat ){
  //カテゴリー名を表示
  echo $cat->name;
  //スラッグを表示
  echo $cat->slug;
  //カテゴリーリンク
  echo get_category_link( $cat->term_id );
}
?>カテゴリーの一覧を表示する例
カテゴリーの一覧を表示する場合にはリストタグを使用することがほとんどかと思います。
今回はリンク付きの場合の例をあげておきます。
<?php
echo '<ul>';
$cats = get_the_category();
foreach( $cats as $cat ){
  echo '<li class="' . $cat->slug . '"><a href="' . get_category_link($cat->term_id) . '">' . $cat->name . '</a></li>';
}
echo '</ul>';
?>
スラッグをclassとして表示させるとカテゴリー毎に色を分ける時などに便利です。
選択したカテゴリーの親を表示する場合は、parentプロパティを使用して親カテゴリ―の情報を取得してから表示させたい項目を指定します。
ただし、選択したカテゴリー自体が親の場合もあるので条件分岐にて処理します。
<?php 
$cats = get_the_category();
$cat = $cats[0];
if( $cat->parent ){ //親カテゴリーがある場合
  $parent = get_category( $cat->parent );
  echo $parent->name;
  echo $parent->slug;
  echo get_category_link( $parent->term_id );
} else { //親カテゴリーがない場合
  echo $cat->name;
  echo $cat->slug;
  echo get_category_link( $cat->term_id );
}
?>カテゴリーは階層構造なので親カテゴリー・子カテゴリーだけでなく、さらに深く階層化することができます。そんな時に最上位のカテゴリー(祖先カテゴリー)を表示したい場合があるかと思います。
祖先カテゴリーを取得するためには、まず祖先のIDを配列で取得するget_ancestorsを使用します。通常get_ancestorsの配列は孫から親の順番となるのでarray_reverseを使用し、配列を逆順にしてから表示したい項目を指定します。
<?php
//現在の投稿記事のIDからカテゴリー情報を取得
$cats = get_the_category( $post->ID );
$cat = $cats[0];
if( $cat->parent ){  //親カテゴリーがある場合
  //配列の順番を入れ替える
  $ancestor = array_reverse(get_ancestors( $cat->term_id, 'category' ));
  //カテゴリー名を表示
  echo get_term($ancestor)->name;
  //スラッグを表示
  echo get_term($ancestor)->slug;
  //カテゴリーリンク
  echo get_term_link($ancestor);
} else { //親カテゴリーがない場合
  echo $cat->name;
  echo $cat->slug;
  echo get_category_link( $cat->term_id );
}
?>今回使用した関数など
| array_reverse | 配列の要素を逆順にする | 
|---|---|
| get_ancestors | 祖先のIDを配列で取得 | 

今回は投稿記事に紐づくカテゴリー表示について解説しました。カテゴリーやタクソノミーの一覧ページ(アーカイブページ)では表示方法が少し違いますのでまた次回説明していきます。


