WordPressでは、親カテゴリや祖先カテゴリを取得する方法が色々とあります。
ただ、この方法を使えば全てをカバーできる、という物がないので、状況によって使い分けましょう。
親カテゴリのIDを取得する
直接の親にあたるカテゴリだけが必要な場合は、カテゴリのparentプロパティから取得します。
1 |
$parent_cat_id = $category->parent; |
例として、表示中の記事のカテゴリの、親カテゴリを取得します。
1 2 3 |
$cat = get_the_category(); // 表示中の記事のカテゴリ(配列) $parent_cat_id = $cat[0]->parent; // 親カテゴリのIDを取得 |
get_the_category
で取得できるカテゴリは配列なので、例では配列の最初のカテゴリの、親カテゴリを取得しています。
もし親カテゴリが無い場合は、parentプロパティは数値0
になります。
1 2 3 4 |
// 親カテゴリが無い場合 $parent_cat_id = $category->parent; // $parent_cat_id: 0 になる |
祖先カテゴリのIDを全て取得する
祖先カテゴリを全て取得するには、get_ancestors
関数を使います。
1 |
$ancestor_ids = get_ancestors( $cat_id, 'category' ); |
例として、表示中の記事のカテゴリの、祖先カテゴリのIDを取得します。
1 2 3 4 |
$cat = get_the_category(); // 表示中の記事のカテゴリ(配列) $cat_id = $cat[0]->term_id; // 最初のカテゴリのID $ancestor_ids = get_ancestors( $cat_id, 'category' ); // 祖先カテゴリのIDを取得 |
get_ancestors
関数は祖先のIDを配列で返します。
その際、引数で指定したカテゴリ(例では表示中の記事のカテゴリ)のIDは含みません。
配列は、階層の下から上の順番になります。直接の親IDはインデックス[0]
になります。
パンくずリストに使う時は、配列の順番を逆にする必要があるので、気を付けましょう。
祖先カテゴリのリストを取得する
get_category_parents
関数は、祖先カテゴリをパンくずリストのような形で取得します。
1 2 3 4 |
$cat = get_the_category(); // 表示中の記事のカテゴリ(配列) $cat_id = $cat[0]->term_id; // 最初のカテゴリのID echo get_category_parents( $cat_id ); // 祖先カテゴリを出力 |
1 |
ニュース/国内/スポーツ/ |
リストには、引数で指定したカテゴリ(例では表示中の記事のカテゴリ)も含みます。
第2引数をtrue
にすると、各カテゴリのアーカイブページへのリンクが生成されます。
1 |
echo get_category_parents( $cat_id, true ); // 祖先カテゴリを出力(リンク付き) |
1 |
<a href="http://my-site.com/news/" title="ニュース の投稿をすべて表示">ニュース</a>/<a href="http://my-site.com/news/domestic/" title="国内 の投稿をすべて表示">CSS</a>/<a href="http://my-site.com/news/domestic/sport/" title="スポーツ の投稿をすべて表示">スポーツ</a>/ |
セパレータ '/'
は第3引数で変更することができます。
また、一番最後のセパレータは必ず付いてしまいます(下の例では「スポーツ」の後の▶)。
1 |
echo get_category_parents($cat_id, false, ' ▶ ') // セパレータを変更して出力 |
1 |
ニュース ▶ 国内 ▶ スポーツ ▶ |
結局、カテゴリIDしか取得できない?
親カテゴリや祖先カテゴリについては、get_categories
関数のような、カテゴリ情報全てをオブジェクトで取得できる関数はありません。
取得したIDとget_categories
関数と組み合わせるなど、用途によって、上記の方法をうまく使い分けるしかないようです。
1 2 3 4 5 |
$cat = get_the_category(); // 表示中の記事のカテゴリ(配列) $parent_cat_id = $cat[0]->parent; // 親カテゴリのIDを取得 $parent_cat = get_category( $parent_cat_id ); // 親カテゴリの情報(オブジェクト)を取得 |
TRACKBACKS