「指定の親に含まれる子タクソノミー」で条件分岐する方法|WordPress
WordPressのカスタム投稿でタクソノミー一覧ページを作っていたのですが、
「ある親に含まれる子タクソノミー」を指定して条件分岐するときに困ったので解決策を共有。
言葉にすると難しいですね笑
目次
具体的にやりたかったこと
例えば、「活動」というカスタム投稿を作ったとして、そのなかに「広報」と今流行りの「SDGs」というタクソノミーを作ったとします。
「SDGs」には子タクソノミーにそれぞれ17の項目を作ります。
そのとき、「SDGs」の子タクソノミー一覧ページにだけSDGsアイコンを並べて、それぞれの一覧ページを行き来させるようにしたかったのです。
カテゴリーだったら参考になる記事が簡単に見つかったのですが、カスタムタクソノミーでやっている記事が見つからず苦労しました。
いろいろ調べて解決しましたので、健忘録かねて情報共有。
核心部分のコード
$term_id = (int) get_queried_object_id();
if( term_is_ancestor_of( 親のタクソノミーID, $term_id, 'タクソノミー名' ) )
簡単に説明すると、今表示しているページのタクソノミーと指定したタクソノミーが子孫関係にあるか調べて、「もし親子関係=Trueなら」という条件分岐をつくってあげます。
①タクソノミーオブジェクトを取得。
$term_id = (int) get_queried_object_id();
get_queried_object_id()で現在表示されているタクソノミ一覧ページのタクソノミーオブジェクトを取得し、$term_idに代入します。
(echoなどしてみて出力された数字が、その子タクソノミーのIDであれば正しく取得できています)
(int)はパラメータが整数値であれば不要です。
関数リファレンス/get queried object – WordPress Codex 日本語版
②タクソノミーが子孫関係か調べる。
term_is_ancestor_of( 親のタクソノミーID, $term_id, 'タクソノミー名' )
term_is_ancestor_of( 親のタームID, $term_id, ‘タクソノミー名’ )で親子関係にあるか調べます。
子孫関係であればtrueが返ってきます。
term_is_ancestor_of() | Function | WordPress Developer Resources
英語が苦手な方はこちら
term_is_ancestor_of – WordPress私的マニュアル
③条件分岐する
if( term_is_ancestor_of( 親のタクソノミーID, $term_id, 'タクソノミー名' ) )
あとは②の記述をifに入れてあげて、if(子孫関係)なら~という条件分岐を作ってあげます。
実際の使用例
解りづらいと思うので、実際の使用例を。
archive.phpに記述して、「SDGs」の子タクソノミー一覧ページにだけSDGsアイコンを並べてあげる想定です。
// 例えば、活動のタクソノミー名「tax_action」、親(SDGs)のタクソノミーID「3」のとき
<?php
$term_id = (int) get_queried_object_id();
if( term_is_ancestor_of( 3, $term_id, 'tax_action' ) ):
?>
// ここにSDGsの子タクソノミーの一覧ページにのみ表示したい内容を記述
// 今回はSDGsの17個のアイコンを並べたいのでリストで画像を表示
<ul>
<li><a href="01貧困~のタクソノミー一覧へのリンク"><img src="01のアイコン画像のパス"></a></li>
<li><a href="02のタクソノミー一覧へのリンク"><img src="02のアイコン画像のパス"></a></li>
// ・・・以下略・・・
<li><a href="17のタクソノミー一覧へのリンク"><img src="17のアイコン画像のパス"></a></li>
</ul>
<?php else: ?>
<?php endif; ?>
ちなみにカテゴリーのとき
$term_id = (int) get_queried_object_id();
if( cat_is_ancestor_of( 親のカテゴリーID, $term_id ) )
カテゴリーのときはこれでいけます!
以上!
WordPressの勉強するならこの一冊
私自身、この1冊から始めて今でもずっと見返す一冊です。