【WordPress】最上位(親)と最下位(子)カテゴリーの情報を取得する方法
Index
通常のカテゴリ取得方法
$category = get_the_category();
$cat_name = $category[0]->cat_name;
カテゴリー名表示
<?php echo $cat_name; ?>
このカテゴリ取得方法での問題点
この方法はget_the_categoryで取得した配列の初め[0]の情報を取得するのだけど、記事のカテゴリーが親子関係で尚且、どちらにもチェックが入っている場合、必ずしも初めの[0]に親カテゴリーの情報が入っているとは限りません。同じカテゴリーにチェックを入れた別の記事ページでは子カテゴリーの情報が入る場合もあり、ページごとに表示がバラバラになってしまいます。
なので直接親カテゴリーを指定する取得方法と子カテゴリー情報を取得する方法を解説。
最上位(親)カテゴリー情報取得
<?php
$categories = get_the_category();
foreach($categories as $cat) {
if($cat->category_parent == 0) {
$parent_category = $cat;
break;
}
}
$parentName = $parent_category->name;
$parentSlug = $parent_category->slug;
$parentId = $parent_category->term_id;
?>
親カテゴリーの名前を表示
<?php echo $parentName; ?>
親カテゴリーのスラッグを表示
<?php echo $parentSlug; ?>
親カテゴリーのカテゴリーIDを表示※1
<?php echo $parentId; ?>
参考にしたサイト
最下位(子)カテゴリー情報取得
最上位(親)カテゴリー情報取得とは異なりfunctions.phpに下記を追加する必要があります。
functions.php
function get_term_descendants ( $post_id ='', $tax_name = 'category' ) {
$terms = get_the_terms( $post_id, $tax_name );
if ( empty( $terms )) return false;
$candidate = $terms;
$count = count( $terms );
if ( $count > 1 ):
foreach( $terms as $key => $term ):
foreach( $terms as $term2 ):
if ( term_is_ancestor_of( $term->term_id, $term2->term_id, $tax_name ) ) {
unset( $candidate[$key] );
break;
}
endforeach;
endforeach;
endif;
return $candidate;
}
呼び出したい箇所に記述
<?php
$descends = get_term_descendants();
if ( $descends ){
foreach ( $descends as $descend ){
$descends_category = $descend;
}
}
$descendsName = $descends_category->name;
$descendsSlug = $descends_category->slug;
$descendstId = $descends_category->term_taxonomy_id;//category ID
$descendstParentId = $descends_category->parent;
?>
子カテゴリーの名前を表示
<?php echo $descendsName; ?>
子カテゴリーのスラッグを表示
<?php echo $descendsSlug; ?>
子カテゴリーのカテゴリーIDを表示
<?php echo $descendstId; ?>
子カテゴリーが所属している親カテゴリーのIDを表示※1と同じ意味
<?php echo $descendstParentId; ?>
参考にしたサイト
おすすめ書籍
WordPress5.3.xに対応し、テーマ作成、プラグインの使用方法、wordpress関数が理解できる、初心者〜中級者向け書籍。