イベントカテゴリの一覧ページ(category.php)作成 | SkillhubAI(スキルハブエーアイ)

イベントカテゴリの一覧ページ(category.php)作成

カテゴリ毎に投稿の一覧表示を行う、category.phpを作成します。
カテゴリ一覧ページのデザインが2種類ありますが、今回はイベント一覧(event.html)をcategory.phpにします。
file

category.phpを準備する

該当ページの確認

これから作成するcategory.phpが反映されるページを開きましょう。

WordPressサイトのヘッダーナビゲーションから「イベント」をクリック。
イベントカテゴリの投稿一覧(が表示される予定のページ)を開きます。
file

今は上図のように、トップページに使っているindex.phpと同じデザインで表示されています。

category.phpを新規作成

event.htmlを複製して、category.phpを作成します。
直にファイル名を変更しても、別名で保存などを使ってsingle.phpを作成しても構いません。
file

category.phpも読み込んで欲しいCSSやメニュー、footer部分は他ページと共通です。
完成したページテンプレート(page.phpなど)から、以下2箇所のコードを貼り付けましょう。

① 1行目~</header>まで
file

② footerタグから最終行まで

file

category.phpを上書き保存します。
最初に開いた、イベントカテゴリの一覧ページを再読み込みしてください。
file

  • イベント一覧のレイアウトに置き換わっている
  • WordPressの管理メニューが上部に表示されている
  • ヘッダー部分がWordPress仕様になっている

上記3つを満たしていれば、category.phpのベースは出来ています。

見出しや投稿の一覧表示を整える

タイトルとh1見出し

ブラウザのタブに表示されている文字を見てみてください。
<title>タグ内で<?php the_title( ); ?>と記述した位置に、投稿タイトルが表示されているはずです。

file

<?php the_title( ); ?>ではカテゴリ名やタグ名は出力できません。
タクソノミー名(カテゴリやタグの名称)を表示する、下記のコードに変更しましょう。

<?php single_term_title( ); ?>

タイトルタグの変更

head内、<title>タグ部分を変更します。

category.php

<title><?php single_term_title( ); ?> | <?php bloginfo('name'); ?></title>

file

h1タグの変更

同じ<?php single_term_title( ); ?>を、h1タグの中にも貼り付けます。
これは、カテゴリ名に変更があったときや、新しいカテゴリを作った際にも自動で対応できるようにするためです。

合わせて、見出し下の画像パスも直しておきましょう。

category.php

<main class="bg-base categories">
    <div class="container">
        <section class="section-padding">
            <h1 class="text-green text-center">
                <?php single_term_title( ); ?>一覧
            </h1>
            <div class="text-center">
                <img src="<?php echo get_template_directory_uri();?>/images/line.png" width="400" height="6" alt="">
            </div>
        </section>

file

投稿の一覧表示を作成

該当するカテゴリーに属している投稿を取得・表示させるためのループを書きます。
ここはメインループ、WordPressがURLから自動で判定して取得してくれるもので十分ですね。

1つ目のartilce要素を挟むように、whileとendwhileを書きます。
2つ目以降のatticle要素は要らないので、削除しておいてください。

category.php

file

ループ内をWordPressのテンプレートタグに置き換えて、各投稿の情報を出力します。

それぞれ個別に書き換えても良いですが、このカードはindex.phpで使っているのとほぼ同じです。
index.phpの<artilce> ~ </artilce>までをコピーして、要素ごと置き換えても良いです。
この場合は、投稿タイトルだけ、h2かh3かの違いがあるので調整してください。

category.php

<section class="section-padding">
  <!-- ここからカード並び -->
  <div class="flex-container card-container">
    <?php while (have_posts()) : the_post(); ?>
      <artilce class="card-wrapper">
        <div class="card">
          <?php the_post_thumbnail(); ?>
          <a href="<?php the_permalink() ?>">
            <h2><?php the_title(); ?></h2>
          </a>
          <div class="text-orange">
            ★★★★★
          </div>
          <div class="card-description">
            <?php the_excerpt(); ?>
          </div>
          <div class="card-footer flex-container flex-all-row">
            <div class="card-author">
              <img src="<?php echo get_template_directory_uri();?>/images/michan.png" width="26" height="26" alt="michan">
              <?php the_author_posts_link(); ?>
            </div>
            <div class="card-date">
              <?php echo get_the_date(); ?>
            </div>
          </div>
        </div>
      </artilce>
    <?php endwhile; ?>
  </div>
</section>

file

ページネーションを作る

ページネーションとは、1ページに表示できる件数を超えた時に、2ページ目、3ページ目…と移動できるようにする“ページ番号付きのリンク”のことです。今回のデザインだと、イベントやお知らせ一覧のページで、フッター上にある数字が該当します。
file

1ページに表示する最大投稿数を変更

WordPressでページネーションを表示するには、投稿が1ページ内に収まらない数である必要があります。
次のページで表示するほど投稿数がなければ、ページネーションは表示されません。

投稿を量産するのは大変ですので、1ページに表示する投稿数を減らしましょう。
WordPressの管理画面から、設定 > 表示設定 を開きます。
file
1ページに表示する最大投稿数を変更します。
今あるイベントカテゴリの投稿数よりも、少ない数を設定して「変更を保存」してください。

ページネーションを呼び出す

肝心の、ページネーションを表示するためのコードをcategory.phpに書きましょう。

WordPressではpaginate_links()関数で、ページ番号付きリンクを取得してくれます。 echoを使って出力するので、実際に使うのは以下の形です。

<?php echo paginate_links(); ?>

category.phpの、ダミーのページネーションの上辺りに入れてみましょう。

category.php

<div class="pagination section-padding">
  <div class="text-center">
    <?php echo paginate_links(); ?>
    <a href="#" class="current">1</a>
    <a href="#">2</a>
    <a href="#">次へ »</a>
  </div>
</div>

CSSを調整する

paginate_links()によるページネーションを、イベント一覧のページで確認してみましょう。

file

素材のHTML,CSSでは、上図のように数字(ページ番号付きリンク)の間隔がズレます。

style.cssの方で調整しましょう。
検証ツールで、WordPressが出力している部分の要素とクラスを確認します。
file

style.cssを開き、該当部分のCSSセレクタを検証ツールで見たものに変更します。

style.css

/* ページネーション */
.pagination .page-numbers{
  margin: 0 1rem;
}

.pagination .current{
  color: #BBBBBB;
}

file
  ↓
file

再読込して、CSSの適用を確認してください。
右側に表示されているWordPressのページネーションの方に、CSSが効いていたら成功です。

paginate_links()の下にある、ダミーのページネーションは削除してください。

category.php

<div class="pagination section-padding">
  <div class="text-center">
    <?php echo paginate_links(); ?>
  </div>
</div>

表示最大投稿数を「8」に変更

ページネーションの表示が確認できたら、WordPress管理画面で“1ページに表示する最大投稿数”の設定を変えます。
今回のデザインだと、一覧ページでは8つずつ投稿情報が出ているので「8」にしておきましょう。
file file

これでcategory.phpは完成です。