何回かに渡りWordPressのカテゴリー情報を取得する方法について解説しています。 前回は第一階層のカテゴリー情報を全て取得する方法について解説しました。 今回は逆に子・孫のカテゴリーとなるn階層のカテゴリー情報のみをすべて取得する方法について解説します。
本稿で解説すること
本稿で解説する「n階層のカテゴリー情報のみをすべて取得」とはどういうことかを説明します。
例として次のような階層のカテゴリーがあるとします。
親カテゴリー1
- 子カテゴリー1
- 孫カテゴリー1
- 孫カテゴリー2
- 子カテゴリー2
親カテゴリー2
- 子カテゴリー3
- 孫カテゴリー3
- 孫カテゴリー4
このような場合に、次のようにカテゴリーを取得するできることを目指します。
- 2階層目のみすべて : 「子カテゴリー1」「子カテゴリー2」「子カテゴリー3」
- 3階層目のみすべて : 「孫カテゴリー1」「孫カテゴリー2」「孫カテゴリー3」「孫カテゴリー4
実現方法
それでは実現方法について解説していきます。 本稿では指定した深さの階層のカテゴリー情報を返却する関数を作っていきます。
1. 指定したカテゴリーの階層を算出する関数を用意する
まずは、便利のために「指定したカテゴリーの階層を算出する関数」を作ります。 関数は次の通りで、第一引数でカテゴリーIDを受け取り算出します。 関数の中身としてはたったの1行です。
function get_depth($id) {
return count(get_ancestors($id, 'category'))+1;
}
この関数の実装上のポイントは、指定されたオブジェクトの祖先オブジェクトのIDを配列を返却してくれる関数 get_ancestors
() です。 返却された配列の長さが祖先の数になりますから、それに1を足せば、指定したカテゴリの階層となります。
2. n階層のみを取得する関数を作成する
上で作成した関数 get_depth()
を利用して、指定した階層のカテゴリーのみを返却してくれる関数を作成します。 関数は次の通りです。 第一引数に取得したいカテゴリーの階層の深さ($depth)を指定できます。
function get_categories_by_depth($depth) {
$categories = array();
foreach( get_categories() as $category ) {
if( get_depth($category->term_id) == $depth ) {
array_push($categories, $category);
}
}
return $categories;
}
WordPress標準関数 get_categories()
で全てのカテゴリー情報を取得したのち、階層が引数で指定した深さのカテゴリーのみに絞り込んで返却します。
3. 作成した関数を呼び出す
上で作成した関数は functions.php
に定義しておいて、あとは必要となるテンプレートで次のように get_categories_by_depth()
関数を呼び出せばOKです。 次の例の場合は、2階層目のカテゴリー情報のみをすべて取得しています。
$categories = get_categories_by_depth(2);
まとめ
本稿では、指定した階層のカテゴリー情報をすべて取得する実現方法について解説しました。 本稿が皆さんのお仕事のお役に立てれば幸いです。