こんにちは!フリーランス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();
でカテゴリ情報を配列で取得し、そこから取得したい情報を一つずつ取得していく形になります。
他にも取得したい情報がある(アレンジしたい)場合、上記以外にも色々な情報を取得できます。
詳しくはコーデックスをどうぞ!