韓国留学、ベルリン短期ワーホリ、転職、Webデザイン、英語勉強、旅行、食べ物、ディズニーなど

WordPressでブログ作り9(category.phpを作成)

category.phpは、各カテゴリに属する記事の一覧を表示するページ用のテンプレートです。
ちなみに、category.phpがない場合は、archive.phpを用意すればこちらが使用されます。が、例えばカテゴリ一覧ページと、タグ一覧ページを異なるデザインにしたい場合などは、category.php、tag.phpなどと分けて作成した方が良いです。
他にも、日付別の一覧ページ用のdate.php、著者別一覧ページ用のauthor.php、カスタム分類別一覧ページ用のtaxonomy.phpなどがあります。

1、home.phpを元に、category.phpを作成

以前の工程で作ったhome.phpをコピーして、「category.php」という名前のファイルを作成します。
まず、カテゴリ一覧のページでは、一番上にタイトルとしてカテゴリ名を表示したいので、「single_cat_title()」を使ってカテゴリ名を出力します。
実際のソースコードは、以下のようになりました。

<h2 class="category-name">
 <i class="fa fa-folder"></i>カテゴリー:<?php single_cat_title(); ?>
</h2>

 

スポンサーリンク

2、Wordpressループの中身を別ファイルに切り分ける

「while ( have_posts() ):」と、「endwhile;」に挟まれている中身の部分をそっくりそのまま切り取り、新規ファイルを作って貼り付けます。新規ファイルは、「each_excerpt_post.php」という名前にしました。(任意の名前で大丈夫です。)
そして、切り取ったところの代わりに、「get_template_part(‘each_excerpt_post’)」と書いて、each_excerpt_post.phpを読み込むようにします。
また、home.phpも同様に、「while ( have_posts() ):」と、「endwhile;」の中身を削除し、「get_template_part(‘each_excerpt_post’)」を記述します。
こうすることで、一覧表示のデザインを変更する場合、each_excerpt_post.phpだけ変えれば、home.phpもcategory.phpも同時に反映されるので管理がラクになります。

home.php、category.phpは以下のようにになりました。

<?php while ( have_posts() ): ?>
 <?php get_template_part('each_excerpt_post'); ?>
<?php endwhile; ?>

3、カテゴリに記事が1件もなかった場合の表示

if文で分岐を書いて、記事がある場合と記事がない場合で表示を出し分けます。
記事がある場合は、2で作ったWordpressループとページネーションを表示し、記事がない場合は、「このカテゴリーには、まだ記事がありません。」という文言を表示することにします。

ソースコードは以下のようになります。

<?php if(have_posts()) : ?>
 <?php while ( have_posts() ): ?>
  <?php get_template_part('each_excerpt_post'); ?>
 <?php endwhile; ?>
 <div class="pagenation">
  <?php wp_pagenavi(); ?>
 </div>
<?php else : ?>
 <p>このカテゴリーには、まだ記事がありません。</p>
<?php endif; ?>

4、特定のカテゴリの時だけ、説明文を表示する

このブログで、「韓国留学日記 2007-2011」というカテゴリの一覧ページにだけタイトルの下に説明文を入れてあります。
※現在、このカテゴリは消してしまいました。

このように、特定のカテゴリだけ説明文をつけるには、まず、管理画面>投稿>カテゴリーで、該当のカテゴリーを選び、「説明」の枠に説明文を記述します。
次に、そのカテゴリーのカテゴリIDを調べます。
調べ方は、そのページ(管理画面>投稿>カテゴリー>該当のカテゴリー)のURLを見ればわかります。

このページでURLを見ると、「category&tag_ID=5」と書いてあるので、IDは5であることがわかります。
なので、カテゴリIDが5のときだけ、説明文を表示し、それ以外は特に表示しないという分岐を書きます。説明文の出力は、「echo category_description()」です。

<?php if(in_category(5)): //カテゴリー:韓国留学日記の時のみ ?>
 <div class="category-description"><?php echo category_description(); ?></div>
<?php endif; ?>

【参考サイト】
プラグイン不要!WordPressカテゴリーページに説明文を入れる方法
WordPress特定のカテゴリ時のみ表示させたい

スポンサーリンク