カテゴリIDを階層順に並べるのは意外と面倒じゃないですか?

カテゴリを階層化している場合は、カテゴリを階層順に並べて出力したい場合ってないでしょうか?投稿記事に紐づいているカテゴリを全部出力するには、get_the_category()関数でいけます。ただし、配列の要素順と階層とは関係なく出力されてしまいます。

 

投稿記事が属しているカテゴリIDを、親→子カテゴリの順に出力する

こんな関数を作ってみました。ループ内でこの関数を呼び出して使います。投稿記事が属しているカテゴリのうち、最も深い階層にあるカテゴリIDを見つけてきます。そのカテゴリの最上位の親カテゴリから、子カテゴリまでのIDを階層順に従った配列で出力します。

functions.php

 

簡単なコードの説明

  1. get_the_category()で、投稿記事が属するカテゴリを配列で出力する。
  2. 1の各カテゴリについて、category_parentプロパティを使って親カテゴリを辿り、それらのIDを配列に入れる。
  3. 2で作成した配列のうち、要素数が最も大きい配列を選択する。

もし、階層の深さが等しい2つのカテゴリに属していた場合は、先にHITした方のみを返します。用途によっては、さらに改善すべき点かもしれませんね。

 

「WordPress Tips」の記事