【WordPress】親カテゴリと子カテゴリをリンク付きで表示する

こんにちは!フリーランスWebディレクター兼エンジニアののせっち@nosecchi01です。

ワードプレスで、親カテゴリ、子カテゴリをそれぞれリンク付きで表示する方法です。

自分自身が調べていて、下記の問題にぶつかりました。

  • コピペで簡単に実装できると思いきや、リンクが出ない(unknownになる)
  • 親カテゴリ、子カテゴリそれぞれにクラスを当てたいのに、一緒くたに出てしまう。

上記問題を解決しつつ、コピペで実装できるように纏めました。
→同じ悩みを持っている方は参考にしてください。

それでは早速行ってみましょう。

親カテゴリをリンク付きで表示する。

<?php
  $categories = get_the_category();  // カテゴリ情報を配列で取得
  foreach( $categories as $category ) :
    $parent = $category->parent; // 親カテゴリーIDを取得
    if( !$parent ){
      echo '<a class="c-meta__cat c-meta__cat--main" href="' . get_category_link( $category->term_id ) . '">' . $category->name . '</a>';
      break;
    }
  endforeach;
?>

ループの中で使う必要がある点に注意してください。

子カテゴリをリンク付きで表示する。

<?php 
  $categories = get_the_category();  // カテゴリ情報を配列で取得
  foreach( $categories as $category ):
    $parent = $category->parent; // 親カテゴリーIDを取得
  if( $parent ) {
    echo '<a class="c-meta__cat c-meta__cat--sub" href="' . get_category_link( $category->term_id ) . '">' . $category->cat_name. '</a>';
  }
  endforeach;
?>

ループの中で使う必要がある点に注意してください。

簡単に解説

$parent = $category->parent

は、親カテゴリのIDを取得しにいきます。

if ( !parent )または、if ( $parent )で親のIDが存在するかどうかを判定しているわけです。

  • if ( !$parent )・・・ 親カテゴリのIDが存在しない → 自分が親である。
  • if ( $parent )・・・ 親カテゴリのIDが存在する → 自分は子である。

ちょっとややこしいですが…。

基本的な考え方としては、

$categories = get_the_category(); 

でカテゴリ情報を配列で取得し、そこから取得したい情報を一つずつ取得していく形になります。
他にも取得したい情報がある(アレンジしたい)場合、上記以外にも色々な情報を取得できます。

詳しくはコーデックスをどうぞ!

この記事を書いた人

のせっち

福岡県出身。早稲田大学卒。創業100年の鉄鋼商社でバンコク駐在最年少抜擢。毎日擦り切れるまで働かなくても幸せに生きている人々を見てフリーランスになりました。
現在は、主にバンコクでWeb制作、物販を中心に生きています。