フツイッター フェイスブック RSS

WEB作成からカメラ・ガジェット・PC系など雑多なブログ

WEB

WordPressでメニューに配置したカテゴリから子カテゴリを表示する。get_term_children関数の用例

2016年03月12日

Pocket

メニューに配置したカテゴリから子カテゴリを取得する

以前にwp_get_nav_menu_itemsを使用したメニュー作成を行いましたが、それの拡張でメニューに配置したカテゴリの子カテゴリをサブメニュー表示する方法です。

言葉を並べてみると何のことだか分かりにくいですね。
要はココの部分です。

カテゴリーメニュー

メニューを表示する

まずwp_get_nav_menu_itemsでのメニュー表示のベースになるコードです。
詳しくは以前の記事を参照してください。

WordPressでメニュー・カテゴリ一覧表示を作る(wp_nav_menuとwp_get_nav_menu_items)
WordPressでメニュー・カテゴリ一覧表示を作る(wp_nav_menuとwp_get_nav_menu_items)

WordPressでメニュー表示する際、一番簡単なのは「wp_nav_menu」を利用することなんだけど、余計なクラス名がついたり、li要素...

wp_get_nav_menu_itemsのコード

ここに今回は子カテゴリを取得してliタグ内に子要素として埋め込んでいきます。

行程としては下記の通り。

1.親カテゴリIDを取得。
2.親カテゴリIDから子カテゴリのID配列を取得。
3.子カテゴリがある場合に子カテゴリを作成。

では順を追って進めていきます。

1.親カテゴリIDを取得

カテゴリIDはwp_get_nav_menu_itemsで取得する配列に格納されています。
中身を見てみましょう。

wp_get_nav_menu_itemsで取得した配列(例では$menu)

この配列のobject_idが該当カテゴリIDになるので簡単ですね。

親カテゴリID取得

2.親カテゴリIDから子カテゴリのID配列を取得

次に子カテゴを取得します。

ここでget term childrenという便利な関数がありました。

get_term_children()
子のタームをすべて、ひとつの配列にまとめます。
この関数は指定されたタームの子タームを、再帰的にすべて取得してひとつの配列に入れます。
階層のあるタクソノミーについてのみ有用です。

もしタームが指定されたタクソノミーに無ければ、空の配列を返します。

WordPressCodex日本語版より引用

記述はこうです。

この関数はカスタム投稿タイプにも使用できるので、ここでは$termはカテゴリID$taxonomyはcategoryを指します。
ですので今回の用例ではこう書いておきます。

子カテゴリID配列を取得

これで$childrenに子カテゴリID配列が入りました。
尚、子カテゴリがないものには空の配列が入ります。

配列した子カテゴリID配列(例では$children)

3.子カテゴリがある場合に子カテゴリを作成。

ようやく子カテゴリ作成です。
ここはまとめてコードを見てみます。

子カテゴリ有無の分岐~ループ

まず、先ほど取得した$children配列の有無で分岐します。

ある場合はforeach処理でループ。

$childrenは子カテゴリIDしか入っていない配列で$childはそのまま子カテゴリIDになりますので、IDからリンクとカテゴリ名を取得します。

以上で処理は完了です。

コードまとめ

コードをまとめるとこうなります。

メニューに配置したカテゴリから子カテゴリを取得する記述

まとめ

ポイントはwp_get_nav_menu_itemsに格納されている配列get_term_children関数ですね。
残りはカテゴリIDから情報を取得するだけなので難しくないと思います。

尚、今回の例は子カテゴリを取得してul liで並べてるだけなので、当サイトのナビゲーションのようにhoverで色を変えるには当然classにカテゴリースラッグを書き込む等が必要になります。

たいしたコードじゃないですが、備忘録がてらに一応スラッグ取得コード書いておきます。

カテゴリスラッグ取得

ではでは

このカテゴリで良く読まれている記事
関連記事

COMMENT