Close

Web技術Tips

Homepage Tips Homepage Tips

ホームWeb技術Tipsタクソノミー使用時、一番下の階層のタームを取得する方法

SHARE

SHARE

WordPress 2014.04.28(公開)

タクソノミー使用時、一番下の階層のタームを取得する方法

親子関係にある多階層のタームが設定されている場合、その一番下層にあるタームの情報を取得するのはなかなか考えさせられます。
例えば次のような階層構造での状況です。

<タクソノミーの階層構造>

□東京

└□23区

 └□新宿区

※実際は他にも多くの地域が登録されているとします。

<状況>

  • 基本的には「東京」「23区」「新宿」のように各階層にひとつずつチェックが入っている
  • しかし新宿区の階層だけチェックが入っていない場合もある
  • チェックが入っているタームの中で一番子孫にあたるターム情報だけ取得したい(新宿区にチェックが入っていないければ「23区」を取得)

上記の状況で、「個別ページ」において、現在表示されている投稿が属しているタームのうち、一番下層のターム情報を取得する際のコードは以下です。

$taxonomy = 'example-cat';
$terms = get_the_terms($post->ID, $taxonomy);
$ancestor_maxnum = 0; 

foreach($terms as $term){
	$dep = count(get_ancestors($term->term_id, $taxonomy));
	if($dep >= $ancestor_maxnum){ 
		$ancestor_maxnum = $depth;
		$current_term = $term;
	}
}

詳しい解説

$taxonomy = 'example-cat';

取得したいタクソノミーのタクソノミー名を予め変数に格納しておきます。

$terms = get_the_terms($post->ID, 'result-cat');

get_terms()という似たような関数があるが、これはどこのテンプレートからも使用できる汎用的な関数のイメージ。今回は個別ページから今の投稿が属しているタームの情報を得たいのでget_the_terms()ではなくget_terms()を使用する。これはIDの指定が必須で、自分のIDを指定する。

$ancestor_maxnum = 0;

この変数にタームの祖先が何台上まであるか格納する予定なので、まずは0としておきます。

foreach($terms as $term)

get_the_terms()で取得したタームは「名前順に」$termsに格納されています。決して一番先祖にあたるタームから並ぶわけではないのです。

echo ‘<pre>’;
print_r($terms);
echo ‘</pre>’;

試しに$terms = get_the_terms($post->ID, $taxonomy);の後に上記のコードを入れてみると一発でわかります。

DOE(横浜)のニュースとブログ

News News

横浜のWeb制作会社DOEはホームページ制作に関連するWeb技術、Webデザイン、SEO対策情報など人気&おすすめ記事を随時公開中です。
尚、Twitterでは現場の声がリアルタイム配信中です。良かったらShareして繋がってください。