ウェベン!

「ある親タクソノミーに含まれる子タクソノミー」を指定して条件分岐する方法

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 ) )

カテゴリーのときはこれでいけます!

以上!

キーワード: