特定のカテゴリ一覧を表示させる|WordPress
※当サイトはWeb広告を利用しています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'); ?> <!--カテゴリスラッグと表示件数-->
です。