WordPressのカテゴリー関係いろいろ

PHP初心者でもわかりやすいように、ワードプレスのカテゴリー関係の取得や出力方法をまとめました。パラメーターを指定したり条件分岐をすることで、沢山カスタマイズできます。functions.phpが苦手な方は、上手にプラグインを使うのもおすすめです。

投稿が属するカテゴリーを表示したい

ループ内でつかう

現在の投稿が所属する全てのカテゴリーをリンク付きで表示するときは、the_category( );が一番簡単です。パラメーターを指定せずにそのまま使えば、ul>liのリストで一覧表示されます。

パラメーターに区切り文字を設定すると、ul>liではなく、指定した文字で区切られて横並びに表示されます。

リンク無しにしたい場合や、CSSで見た目を整えたい場合は次のget_the_category( );を使います。getが入るだけで使い方がガラリと変わるので、最初は紛らわしいかもですね。

まずget_the_category( );で現在の投稿が所属する全てのカテゴリー情報を取得して、$categoriesに代入します。わかりにくいと思うので簡単に図にするとこんな感じ▼。所属するカテゴリーが1つだけなら$categories[0]だけ。2つ以上あると、$categories[1], $categories[2]…のようにオブジェクトが増えていきます。そしてさらにその中に、カテゴリーのIDや名前、スラッグなどの情報がオブジェクトの配列として入っているわけです。

1つのカテゴリーを表示

カテゴリが1つしかない、または最初の1つだけを表示したいときは、次のように書きます。

$categories[0]の情報の中から、カテゴリー名(cat_name)を選ぶという感覚ですね。ちなみに格納されているオブジェクトの順番は必ずしも親カテゴリー→子カテゴリーではないので、[0]を指定するだけでは思った通りの結果にならないことがあります。

全てのカテゴリーを表示

所属カテゴリーが2つ以上あり、全てのカテゴリー名を出力したいときは次のようにforeachを使います。

例えばある投稿の親カテゴリーが「ニュース」で、子カテゴリーが「経営」だったとすると、上の記述の出力結果は次のようになります。

先述したように、格納されているオブジェクトの順番は必ずしも親カテゴリー→子カテゴリーではありません。ちょっと不便ですね(^^;

所属するカテゴリーの親カテゴリーを表示

親カテゴリーだけを出力したいときは次のようなコードが使えるかも。

その他にも、オブジェクトのパラメーター▼を活用すれば色々できるので試してみてください〜。

WP_Termオブジェクト(カテゴリー情報)のパラメーター

  • term_id:カテゴリー ID
  • name:カテゴリー名
  • slug:カテゴリーのスラッグ
  • term_group:カテゴリーのグループ
  • term_taxonomy_id:カテゴリーのタクソノミー ID
  • taxonomy:タクソノミー名
  • description:カテゴリーの説明
  • parent:親カテゴリーの ID
  • count:カテゴリーに登録されている投稿の数
  • object_id:オブジェクト ID

WP_Termオブジェクトやパラメーターがよくわからない方、get_category( );をもっと詳しく知りたい方はこちらの記事がわかりやすく参考になります。

ループ外でつかう

the_category( );はループ外では使えないので、get_the_category( );のパラメーターに投稿IDを指定することで、指定した投稿が所属するカテゴリー情報を取得できます。

 

サイトに存在するカテゴリー全てを表示したい

一覧表示する簡単な方法

サイドバーなどでシンプルに一覧表示する時はwp_list_categoriesが一番簡単です。

こちら▲を1行書くだけで、全てのカテゴリーをリスト表示してくれます。( )内にパラメーターを指定すればカスタマイズも可能です。次の例では、題名「カテゴリー」を非表示、投稿数を表示、ID’10’のカテゴリーを非表示、最上位カテゴリーのみ表示、という内容でパラメーターを指定しています。

その他、よく使うカスタマイズ例はこちらの記事▼に詳しく載ってます。

一覧表示するカテゴリーの順番を変える

表示されるカテゴリーの順序を好きなように変えたい時は「Intuitive Custom Post Order」というプラグインがおすすめです。カテゴリー以外にも、投稿や固定ページ、カスタム投稿の並べ替えも簡単に自由自在!詳細はこちらの記事▼で。

もっとアレンジしてカテゴリー一覧を表示する方法

パラメーターで指定しきれないとき、条件分岐でさらにアレンジしたいときはget_categoriesを使います。なんだか、get_the_category、get_category、get_categories・・・って似てるからややこしいですね。

似ているものを一旦整理しましょう

get_the_category();

→現在の投稿が所属するカテゴリー情報を取得します。

get_category(‘カテゴリIDまたはオブジェクト’);

→IDまたはオブジェクトで指定したカテゴリー情報を取得します。

get_categories();

→サイトに存在する全てのカテゴリー情報を取得します。パラメーターの”taxonomy”にカスタムタクソノミー名を指定すると、指定したカスタム分類の一覧を取得することもできます。

パラメーターのデフォルトと説明

 

get_categoriesについては、こちらの記事▼が参考になります!

長くなってきたので一旦公開して、あとで追記します;;