35歳で会社を辞めてサイト運営で生計を立てているフリーランスのブログ

現役Webデザイナーがお答えします

特定のカテゴリ一覧を表示させる|WordPress

WordPressで、

・トップページに「イベント」カテゴリの新着記事のみ5件表示させたい
・「お知らせ」カテゴリと「ニュース」カテゴリを別のエリアに分けて表示させたい

という場面はよくありますよね。

つまりは、特定のカテゴリーの一覧を表示させるということです。

今回はそれを実現するために、get_postsとquery_postsを使った方法を紹介します。

スポンサードリンク

get_postsとquery_postsの違い

なぜ、この2つのテンプレートタグを使った方法を紹介するかというと、query_postsが非推奨になっていることを知ってほしかったからです。

参照:テンプレートタグ/query posts – WordPress Codex 日本語版

query_postsを使うと問題が発生しやすいんですよね。私もquery_postsが原因で、ページ送りがまともに動かず、四苦八苦した経験があります。

ところが、Googleで「WordPress 特定のカテゴリ 一覧」などと検索するとquery_postsが使われたサンプルが多く出てくるんですよね。以前はよく使われていたし、一応、動作はするので、その紹介記事が多くなっています。

しかし、前述したよう非推奨となっているテンプレートタグを使うと、これからが大変かもしれません。そこで代わりに、get_postsを使った方法を紹介します。

推奨:「get_posts」で特定のカテゴリを一覧表示

以下のコードを任意の場所(single.phpやindex.php)に入れて、「表示する内容が入ります。」のところを好きなように変更してください。

posts_per_pageで表示件数を変更できます。categoryで表示させたいカテゴリーIDもしくはスラッグを指定します。

<?php
$posts = get_posts(array(
'posts_per_page' => 2, // 表示件数
'category' => '4' // カテゴリIDもしくはスラッグ名
));
?>
<?php if($posts): foreach($posts as $post): setup_postdata($post); ?>

<!--表示する内容が入ります。-->
<h3><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h3>
<p><?php the_time('Y/m/d') ?></p>
<p><?php the_excerpt(); ?></p>
<p><a href="<?php the_permalink() ?>">続きを見る</a></p>
<!--表示する内容ここまで-->

<?php endforeach; endif; ?>

スポンサードリンク

非推奨:「query_posts」で特定のカテゴリを一覧表示

何かしらの要因でうまくいかない場合、query_postsを使えば実現するかもしれません。ただし、非推奨となっているのでご注意ください。

cat=4&showposts=2でカテゴリIDと表示件数を指定できます。

<?php query_posts('cat=4&showposts=2'); ?> <!--カテゴリIDと表示件数-->
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

<!--表示する内容が入ります。-->
<h3><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h3>
<p><?php the_time('Y/m/d') ?></p>
<p><?php the_excerpt(); ?></p>
<p><a href="<?php the_permalink() ?>">続きを見る</a></p>
<!--表示する内容ここまで-->

<?php endwhile; endif; ?>
<?php wp_reset_query(); ?>

カテゴリースラッグを使う場合は、

<?php query_posts('category_name=wordpress&showposts=2'); ?> <!--カテゴリスラッグと表示件数-->

です。