MENU

【WordPress】最上位(親)と最下位(子)カテゴリーの情報を取得する方法

通常のカテゴリ取得方法

$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; ?>

参考にしたサイト

【WordPress】複数のカテゴリーから親カテゴリーのみ取得する方法

最下位(子)カテゴリー情報取得

最上位(親)カテゴリー情報取得とは異なり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; ?>

参考にしたサイト

【WordPress】記事が所属する最下層のカテゴリー名を取得する