カスタム分類(タクソノミー)を使用した記事の親タームを取得する方法を調べたので一例としてご紹介します。
以下のような構成から親タームを取得し、名前を表示させることにしました。
【ソース】
<?php
$term = array_pop(get_the_terms($post->ID, 'taxonomy1'));
$term_p = $term->parent;
if ( ! $term_p == 0 ){
$term = array_shift(get_the_terms($post->ID, 'taxonomy1'));
}
echo esc_html($term->name);
?>
【2行目】
get_the_termsで投稿記事のタクソノミーの取得を行います。
すると親と子、両方の配列が取れてしまうためarray_popを使って配列の片方を取り除きます。
これは配列の最後を取り除く関数のようです。
(この辺りで若干詰まってプログラマーさんに教わりました(・ω・’ ))
親の配列が[0]に入っていた場合、ほぼ準備は完了です。
しかし、タームの配列に入る順番の規則性が分からず、時々親と子が引っくり返っている状態になっていることが判明しました。
なので更に条件分岐を行います。
【3行目】
取得した配列からParent……親タームのIDを取り出します。
【4行目~5行目】
もし2行目で親要素が取得出来ている場合、$term_pの値は0になります。
そこで$term_pが0でない場合、という条件で分岐を行いました。
その後は再度$termに配列を取得し直します。
array_shiftは先程とは逆に、先頭にある配列を取り除く関数です。
これで$termに思い通りの値が取れました。
【7行目】
最後に親ターム名を表示したい部分へ貼り付ければOKです。
「->name」部分を任意の返り値にすればスラッグ名なども呼び出せます。
今回は親と子が1:1ずつしかない為、1つずつ値を削除するだけで事足りました。
もしタームが複数選択されている場合はどうなるのか気になります……。
(他のやり方としてwp_get_post_termsという関数があるらしいという所までは突き止めましたが、実際に入れてみてもうんともすんとも動きませんでした)
他にもっと簡単に取得できるよ!という場合があれば是非ご教授下さい_|\○_
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。