fumi WEB フミウェブ

お見積もり・ご相談はこちら

fumi Blog

コーディング中心に活動中のフリーランス、
fumicaのブログ。
日々取得した技術や勉強の記録をまとめています。

【WordPress】投稿一覧ページのサイドバーにカテゴリー一覧を表示する方法

今回はブログのサイドバーにカテゴリー一覧を表示する方法についてご紹介します。

ブログサイトには必ず存在する、この部分です。

カテゴリー一覧を表示する方法

カテゴリー一覧を表示する方法は大きく分けて2つあります。

①各カテゴリーページへのリンクを設置する

この方法は実装が簡単ですが、カテゴリを追加しても、自動で追加されることもなく、記事数を表示することも出来ません。

簡単なコード例

<ul>
      <li>
        <a href="<?php echo esc_url(get_category_link(get_cat_ID('HTML/CSS'))); ?>">HTML/CSS</a>
      </li>
      <li>
        <a href="<?php echo esc_url(get_category_link(get_cat_ID('Wordpress'))); ?>">WordPress</a>
      </li>
      <li>
        <a href="<?php echo esc_url(get_category_link(get_cat_ID('WEBデザイン'))); ?>">WEBデザイン</a>
      </li>
      <li>
        <a href="<?php echo esc_url(get_category_link(get_cat_ID('お知らせ'))); ?>">お知らせ</a>
      </li>
    </ul>

解説

<?php echo esc_url(get_category_link(get_cat_ID('WordPress'))); ?>

「Wordpress」という名前のURLを自動取得するコードです。

カテゴリー名でなく、カテゴリのIDを指定して取得する方法は以下になります。

<?php echo esc_url(get_category_link(6)); ?>

カテゴリ名指定の場合は、カテゴリ名を変更するとリンクが壊れてしまうため、ID指定の方が安全です。

②カテゴリー名を一覧で自動取得する

今回の解説ではこちらがメインです。

全てのカテゴリを取得し、記事数が多い順に一覧表示する方法について解説します。

基本的なコード(コピペOK)

<ul>
      <?php
      $args = array(
        'orderby' => 'count',
        'order' => 'DESC',
        'parent' => 0,
      );
      $categories = get_categories($args);
      ?>
      <?php foreach ($categories as $category): ?>
        <li>
          <a href="<?php echo get_category_link($category->term_id); ?>">
            <?php echo $category->name; ?><?php echo $category->count; ?>
          </a>
        </li>
        <?php
        $childcatnum = count(get_term_children($category->cat_ID, 'category'));
        ?>
        <?php if ($childcatnum > 0): ?>
          <?php
          $catchildargs = array('parent' => $category->cat_ID);
          $catchilds = get_categories($catchildargs); ?>
          <?php
          foreach ($catchilds as $catchild): ?>
            <?php $cat_link = get_category_link($catchild->cat_ID); ?>
            <li>
              <a href="<?php echo $cat_link; ?>">
                <?php echo $catchild->name; ?><?php echo $catchild->count; ?>
              </a>
            </li>
          <?php endforeach; ?>
        <?php endif; ?>
      <?php endforeach; ?>
    </ul>

このコードを貼り付けるとカテゴリが自動取得されます。

ここからclassなどを付けて、デザインに合わせてCSSで調整します。

表示例 ※画像は記事数順に並んでいない状態のスクリーンショットですが、上記のコードを使うと記事数順になります。

特定のカテゴリを除外したい場合(コピペOK)

全てのカテゴリを取得するため、あまり使用しないタグや他投稿ページのタグも出てきてしまう場合もあるかと思います。

その場合はカテゴリIDを指定して除外すれば表示されなくなります。

<ul>
      <?php
      $args = array(
        'orderby' => 'count',
        'order' => 'DESC',
        'parent' => 0,
        'exclude' => array(2, 7, 9, 10, 11)
      );
      $categories = get_categories($args);
      ?>
      <?php foreach ($categories as $category): ?>
        <li>
          <a href="<?php echo get_category_link($category->term_id); ?>">
            <?php echo $category->name; ?><?php echo $category->count; ?>
          </a>
        </li>
        <?php
        $childcatnum = count(get_term_children($category->cat_ID, 'category'));
        ?>
        <?php if ($childcatnum > 0): ?>
          <?php
          $catchildargs = array('parent' => $category->cat_ID);
          $catchilds = get_categories($catchildargs); ?>
          <?php
          foreach ($catchilds as $catchild): ?>
            <?php $cat_link = get_category_link($catchild->cat_ID); ?>
            <li>
              <a href="<?php echo $cat_link; ?>">
                <?php echo $catchild->name; ?><?php echo $catchild->count; ?>
              </a>
            </li>
          <?php endforeach; ?>
        <?php endif; ?>
      <?php endforeach; ?>
    </ul>

以下の部分で、除外するカテゴリIDを指定しています。

'exclude' => array(2, 7, 9, 10, 11)

解説

$args = array(以降で一覧取得の条件指定をしています。

 $args = array(
        'orderby' => 'count',// 投稿数で並べる
        'order' => 'DESC',// 多い順で並べる
        'parent' => 0,// 親カテゴリを取得
        'exclude' => array(2, 7, 9, 10, 11)// 除外するカテゴリIDを指定
      );

このように表示されていれば成功です!

まとめ

WordPressオリジナルテーマ作成においては、簡単なように見えて意外と実装が難しい、サイドバーの作成。

案件にもよりますが、まずは②のコードで自動取得してみて条件指定をしていく、という方法で進めています。

単純に、特定のカテゴリリンク設置をしたい場合は①のコードも使えます。

WordPressのカテゴリ取得はカスタム投稿ページとの兼ね合いで難しい場面が多いですが、今後も最適な方法を見つけて行ければと考えています。