【ワードプレス】親子カテゴリ・親子ターム順にリンクリストを自動で表示する方法

こんにちは、カスミです。
さて、以下のような事で悩んでいませんか?
ワードプレスでカテゴリ・タームページへのリンクリストをサイドバー・フッターに自動で出力されるようにしたい。
自動で表示する際、親子カテゴリ・親子タームの順に表示させたい。
このような問題を解決いたします。
本記事では、親子カテゴリ・親子タームのリンクリストを自動で表示するコードを紹介します。
親子カテゴリリストを表示するサンプルコード
<?php
$parent_categorys = get_categories(array('hide_empty' => false, 'parent' => 0, 'pad_counts' => true)); //第一階層のカテゴリだけ取得
?>
<?php if (!empty($parent_categorys)) : ?>
<ul class="parent">
<!-- 親カテゴリループ -->
<?php foreach ($parent_categorys as $pc) :?>
<li>
<a href="<?php echo get_category_link($pc); ?>"><?php echo $pc->name; ?><span>(<?php echo $pc->count; ?>)</span></a>
<!-- 子カテゴリループ -->
<?php
$child_categorys = get_categories(array('hide_empty' => false, 'parent' => $pc->cat_ID));
if (!empty($child_categorys)) :
?>
<ul class="child">
<?php foreach ($child_categorys as $cp) :?>
<li>
<a href="<?php echo get_category_link($cp); ?>"><?php echo $cp->name; ?><span>(<?php echo $cp->count; ?>)</span></a>
</li>
<?php endforeach; //End : 子カテゴリ?>
</ul>
<?php endif; ?>
</li>
<?php endforeach; //End : 親カテゴリ?>
</ul>
<?php endif; ?>
デフォルトの投稿タイプを使っていて、親子カテゴリのリンクリストを表示するサンプルコードになります。
ワードプレスの関数、get_categoriesを使うことでカテゴリをリスト表示できますよね?
get_categoriesのプロパティに‘parent’ => 0を追加する事で、子カテゴリが存在してなく親しか無いという条件分岐をすることができます。
‘parent’ が0だった時は、そのままカテゴリをforeachでループ。
‘parent’ が0以外だった時は、子カテゴリを親カテゴリー内でforeachでループさせる
子カテゴリのget_categoriesに同じく‘parent’プロパティを付与し、値 に親カテゴリのIDを指定する。
上記で完成です。
親子タームリストを表示するサンプルコード
<?php
$my_tax = 'taxonomy'; //タクソノミー名
$parent_terms = get_terms($my_tax, array('hide_empty' => false, 'parent' => 0, 'pad_counts' => true)); //第一階層のタームだけ取得
?>
<!-- 親ターム -->
<?php if (!empty($parent_terms)) : ?>
<ul class="parent">
<?php foreach ($parent_terms as $pt) :?>
<li>
<a href="<?php echo get_term_link($pt); ?>"><?php echo $pt->name; ?><span>(<?php echo $pt->count; ?>)</span></a>
<!-- 子ターム -->
<?php
$child_terms = get_terms($my_tax, array('hide_empty' => false, 'parent' => $pt->term_id));
if (!empty($child_terms)) :
?>
<ul class="child">
<?php foreach ($child_terms as $ct) :?>
<li>
<a href="<?php echo get_term_link($ct); ?>"><?php echo $ct->name; ?><span>(<?php echo $ct->count; ?>)</span></a>
</li>
<?php endforeach; //End : 子ターム?>
</ul>
<?php endif; ?>
</li>
<?php endforeach; //End : 親ターム?>
</ul>
<?php endif; ?>
<?php } ?>
カスタム投稿タイプを使ってる場合で親子タームのリンクリストを表示する方法です。
先ほどと、仕組みはほぼ同じです。
タームリストの表示にはget_categoriesではなくget_termsを使用。
変数$my_taxにタクソノミー名を指定。
リンクにはget_category_linkではなく、get_term_linkを使う。
以上でカスタム投稿タイプの場合も、親子タームリンクリストを表示することができます。
まとめ
本記事は親カテゴリに対して子カテゴリがある2階層構造を想定したものです。
2階層以上を想定する場合は、さらにforeachを使って子カテゴリ内にループ階層を作っていけば問題ありません。
以上で解説を終わります。