blog
TOP  >   技術記事一覧  >   WordPress  >   WordPressで、記事をカテゴリー別に検索可能にし、選択されたカテゴリーに色付けする方法を解説
WordPressで、記事をカテゴリー別に検索可能にし、選択されたカテゴリーに色付けする方法を解説

WordPressサイトの記事一覧ページで、記事をカテゴリー別に検索可能にして、カテゴリーページで選択されているカテゴリーに色がつくように実装します。よくある実装ですが、文章だけだとよく分からないと思うので、以下の動画をご覧ください。

今回、私の方で眼科のサンプルサイトを作成し、記事を「まめ知識」「目の健康」「目の病気」というカテゴリーに分類しました。実装したい内容については動画で理解できたと思いますので、コードの解説をしていきます。

今回はblogというスラッグのカスタム投稿タイプを作成し、blog_categoryというタクソノミーを用意している前提で解説します。大まかな方針としては、現在表示しているカテゴリー一覧ぺージと一致するカテゴリーにactiveクラスを付与し、背景色をつければ実装できます。

まず、以下のコードをarchive-blog.phpに記述します。こちらは「すべて」の記事一覧ページに使用されるテンプレートファイルです。今回は、記事の内容と関連が薄いコードについては割愛していきます。

<body <?php body_class(); ?>>
  <div class="p-category-list">
    <div class="p-category-list__inner">
      <div class="p-category-list__lead">カテゴリで探す</div>
        <ul class="p-category-list__list">
          <li class="p-category-list__item">
            <a class="p-category-list__item-link p-category-list__item-link--all" href="<?php echo esc_url(home_url()); ?>/blog">すべて</a>
          </li>
          <?php
          $args = [
            'taxonomy' => 'blog_category'
          ];
          $terms = get_terms($args);
          ?>
          <?php foreach ($terms as $term) : ?>
            <li class="p-category-list__item">
              <a class="p-category-list__item-link" href="<?php echo get_term_link($term); ?>"><?php echo $term->name; ?></a>
            </li>
          <?php endforeach; ?>
        </ul>
      </div>
    </div>
    <div class="p-blog__body">
      <div class="p-blog__title">すべての記事</div>
      <?php if (have_posts()) : ?>
      <ul class="p-blog__list">
        //以下の記述は記事との関連は薄いため割愛。

bodyタグにbody_class()を記述していますが、これはページごとに固有のクラスをbodyタグに追加してくれる関数で、archive-blog.phpに対しては、.post-type-archive-blogというクラスが出力されます。また、7行目で、「すべて」のボタンにはp-category-list__item-link–allという固有のクラスを付与しています。

それでは、CSSを記述していきます。

/* ボタンの背景色を灰色に設定 */
.p-category-list__item-link {
  display: inline-block;
  background-color: #f2f2f2;
  color: #000;
  transition: all 0.3s;
}

/* すべての記事一覧ページのときだけ、「すべて」のボタンの背景色を黒色にする */
.post-type-archive-blog .p-category-list__item-link-all {
  background-color: #000;
  color: #fff;
}

/* ホバーアクション */
.p-category-list__item-link:hover {
  background-color: #000;
  color: #fff;
}

ボタンに付与している.p-category-list__item-linkに対して背景色が灰色(#f2f2f2)となるようにしています。そして、.post-type-archive-blog .p-category-list__item-link-all、つまり「すべて」の記事一覧ページのときだけ、「すべて」のボタンに背景色が黒色(#000)となるようにしています。

続いて、taxonomy.phpに以下のコードを記述します。こちらは「まめ知識」「目の健康」「目の病気」の記事一覧ページに使用されるテンプレートファイルです。

<body <?php body_class(); ?>>
  <div class="p-category-list">
      <div class="p-category-list__inner">
        <div class="p-category-list__lead">カテゴリで探す</div>
        <ul class="p-category-list__list">
          <li class="p-category-list__item">
            <a class="p-category-list__item-link p-category-list__item-link--all" href="<?php echo esc_url(home_url()); ?>/blog">すべて</a>
          </li>
          <?php
          $args = [
            'taxonomy' => 'blog_category'
          ];
          $terms = get_terms($args);
          ?>
          <?php foreach ($terms as $term) : ?>
            <li class="p-category-list__item">
              //is_tax()関数を使って、現在表示している一覧ぺージと一致するカテゴリーにactiveクラスを出力
              <a class="p-category-list__item-link <?php if (is_tax('blog_category', $term->term_id)) echo 'active'; ?>" href="<?php echo get_term_link($term); ?>"><?php echo $term->name; ?></a>
            </li>
          <?php endforeach; ?>
        </ul>
      </div>
    </div>
    <div class="p-blog__body">
      <div class="p-blog__title c-heading"><?php single_term_title(); ?>の記事</div>
      <?php if (have_posts()) : ?>
        <ul class="p-blog__list">
          //以下の記述は記事との関連は薄いため割愛。

arhive-blog.phpと殆どコードは同じですが、17行目で<?php if (is_tax(‘blog_category’, $term->term_id)) echo ‘active’; ?>というコードをaタグのclass属性内に書くことで、現在表示しているカテゴリー一覧ぺージと一致するカテゴリーにactiveクラスが出力されるようになっています。そのため、以下のようなCSSを追加すれば、今回の実装が完成します。

.p-category-list__item-link.active {
  background-color: #000;
  color: #fff;
}

以上が記事をカテゴリー別に検索可能にして、カテゴリーページで選択されているカテゴリーに色がつくように実装する方法となります。コードが長くなって申し訳ないですが、関係ない実装についてはなるべく省略しました。よく見る実装ですので、ぜひ今回の記事が皆さんのお役に立てれば幸いです。

expand_less