【WordPress】これってご先祖様?家系図を読み解く便利関数


こんにちは!社会人2年目エンジニアの関です!
今回は、一見使い道がなさそうでめちゃくちゃ便利な「cat_is_ancestor_of」関数についてご紹介したいと思います。
(実はこの関数、私の好きなWordPress関数TOP5に入っていたり・・・)

カテゴリー同士で親子関係を作る
WordPressでは、デフォルトの機能としてカテゴリー同士に親子関係を作ることができます。
その設定方法はとっても簡単で、以下の2ステップのみです。

①子にしたいカテゴリーの編集画面にアクセスする。
②「親」の入力欄に親にしたいカテゴリを指定、保存して完了!

wordpress設定画面

例えば、
「東京」の親に「関東地方」を
「中央区」の親に「東京」を
「入船」の親に「中央区」を設定すると、
「関東地方(親)> 東京(子)> 中央区(孫)> 入船(ひ孫)」といった親子関係が形成されます。

また、カテゴリー「東京」の親に「関東地方」を設定した場合、
・親子関係なし:category/東京
・親子関係あり:catgory/関東地方/東京
といったように
子孫カテゴリーページのURLも「category/親/子/孫/ひ孫/・・・」の形式に変更されます。

「cat_is_ancestor_of」ってどんな関数?

この条件分岐タグは、カテゴリーが他のカテゴリーの「先祖」カテゴリーであるかどうかをチェックします。真偽値を返す関数のため、TRUE または FALSE を返します。
参照:関数リファレンス/cat is ancestor of

とのことですが、
「/)( ◕ ‿‿ ◕ )(\ わけがわからないよ」
という方向けにもう少し説明していきます。

例えば、以下のような親子関係のあるカテゴリーで、
東京都に存在する場所(カテゴリー)だったら表示させたいリンクがあったとします。

mapping
URLに「category/東京都」が含まれているかを調べる?
親カテゴリーを一つ一つ辿って「東京都」カテゴリーにたどり着くことを確かめる?
それとも配列にエリア、名所のカテゴリー名を全部定義しておいて、その中に含まれていたら東京都に存在する場所だと判定させる?
いやいや、どれもパフォーマンス的にも保守性的にもどこかイケていない・・・。

そんなときに活躍するのがこの「cat_is_ancestor_of」関数なのです。

具体的には、以下のようなコードを書くことで、
「雷門」からも「横浜スタジアム」からも「ベイエリア」からも「横浜」からも東京都に存在する場所か否かを判別することができるようになります。

<?php cat_is_ancestor_of( 東京都, 雷門 ); ?>
#=> true
<?php cat_is_ancestor_of( 東京都, 横浜スタジアム ); ?>
#=> false
<?php cat_is_ancestor_of( 東京都, ベイエリア ); ?>
#=> true
<?php cat_is_ancestor_of( 東京都, 横浜 ); ?>
#=> false

この関数を使えば、子、孫、ひ孫、玄孫・・・どのカテゴリーを起点に家系図を辿っても、ご先祖様に指定したカテゴリーが存在するか否かを返してくれます。

おわりに
今回は「cat_is_ancestor_of」関数をご紹介しましたが、
WordPressではその他にも「get_term_children」やget_terms関数デフォルトのパラメータ「child_of」など、親子関係を利用した関数が数多く存在します。

お彼岸も近いので、ぜひ、ご先祖様に思いを馳せながら利用してみてください。