#WordPress ターム(カテゴリ)から最上位のタームID(カテゴリID)を取得する関数 #works

  • スポンサーリンク

  • スポンサーリンク

この記事は公開から7年、最終更新日からも7年経過しています。内容が古くなっている可能性があります。

概要

カテゴリ階層構造を持っているWordPressサイトで、現在の投稿が所属する最上位のカテゴリを取得したいような場合に使用します。
カテゴリIDを取得し、その親のカテゴリID、さらにその親のカテゴリIDという感じで親のカテゴリID=0になるまでループを回すような方法もありますが、それより簡単に実装出来ると思います(個人の感想です)。
※本記事は、カスタム投稿タイプ、カスタムタクソノミーにも応用可能です。

実装

本体部分(あくまで参考の実装例です)

<?php
	$post_ID = 投稿のID;	//投稿のID => get_the_ID()等の関数で取得します。使用する場面によって異なります。
	//投稿IDが所属するタームのオブジェクト取得
	$terms = get_the_terms( $post_ID, 'category' );

	if ( $terms && ! is_wp_error( $terms ) ) {
		foreach ( $terms as $term ) {
			$value1 = get_top_parent($term);	//最上位タームIDを取得できる
			// 何かしらの処理
		}
	}
?>

関数部分

<?php
//タームオブジェクトから最上位の親カテゴリのタームIDを戻す
function get_top_parent($term) {
	$term_hierarchy = array_reverse( get_ancestors( $term->term_id, 'category' ) );
	//当該タームIDの親、その親、さらにその親という順番でタームID配列を取得後、reverseすることで、配列の0番目の要素に最上位の親タームIDが格納される
	if ($term_hierarchy) {
		return $term_hierarchy[0];
	} else {	//親がない場合は(最上位タームの場合)配列が空になるので、その時は、当該カテゴリのタームIDを返す
		return $term->term_id;
	}
}
?>

参考

一番、肝となるWordPress関数「get_ancestors」→関数リファレンス/get ancestors – WordPress Codex 日本語版
WordPressのカテゴリ、タグ、ターム、タクソノミーの違いとテンプレートタグ関数一覧 | WordPress | プライマリーテキスト

最後に

参考になれば幸いです!!

  • スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA