Written by Kasumi

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

こんにちは、カスミです。

さて、以下のような事で悩んでいませんか?

ワードプレスでカテゴリ・タームページへのリンクリストをサイドバー・フッターに自動で出力されるようにしたい。

自動で表示する際、親子カテゴリ・親子タームの順に表示させたい

このような問題を解決いたします。

本記事では、親子カテゴリ・親子タームのリンクリストを自動で表示するコードを紹介します。

親子カテゴリリストを表示するサンプルコード

<?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を使って子カテゴリ内にループ階層を作っていけば問題ありません。

以上で解説を終わります。

目次

関連記事

WordPress プログラミング

【簡単】Advanced Custom Fieldsを使い、手動で任意の関連記事を出力するフィールドを導入

2022.03.21
2402
プログラミング

ドラゴンボール超ブロリー映画のあらすじ・感想を解説!【記事最後にネタバレ有り】

更新日:2020.04.09
909
HTMLCSS プログラミング

【簡単】htmlでpdfファイルを表示・ダウンロードする方法【表示されない場合の解決方法も伝授】

2022.03.23
17261
WordPress プログラミング

カスタム投稿タイプのターム(カテゴリー)の初期設定を変更する方法

2022.04.01
3228