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 プログラミング

【Contact Form 7】Form data to kintoneでkintone側に二重送信されるのを防ぐ【確認画面が原因】

2022.03.17
1231
WordPress プログラミング

【簡単】contact form 7でお問い合わせ内容をkintoneに反映・連携させる方法【wordpress】

2022.03.09
3463
WordPress

固定・投稿ページの順番を手動(ドラッグ&ドロップ)で変更する方法【WordPress】

2022.05.20
2475
WordPress

【WordPress】削除した記事URLが勝手にリダイレクトされる原因・対処方法

2022.07.04
5803