WordPressで特定カテゴリーの新着記事を表示する方法【WP_Query&プラグイン】

WordPress

WordPressで「特定のカテゴリーだけ新着記事を表示したい」と思ったことはありませんか?
実はこの機能、functions.phpを編集しなくても、テンプレートやウィジェット内で WP_Query を使って簡単に実装できます。

例えば、

  • トップページの一部に「お知らせ」カテゴリだけを表示する
  • 固定ページで「ブログ記事」だけの一覧を作る
  • サイドバーに「イベント情報」のみの新着一覧を出す

といった用途に便利です。

本記事では、読み込み時に直接カテゴリを指定する方法(functions.php不要)をサンプルコード付きでわかりやすく解説します。
プラグインを入れなくても実現できるので、カスタマイズしたい方はぜひ参考にしてください。

基本の書き方(WP_Query / query_posts のサンプルコード)

1.WP_Queryを使う方法(推奨)

<?php
// カテゴリーIDが3の投稿だけを取得
$args = array(
  'cat' => 3,             // 表示したいカテゴリーID
  'posts_per_page' => 5,  // 表示件数
);

$query = new WP_Query($args);

if ($query->have_posts()) :
  while ($query->have_posts()) : $query->the_post(); ?>
    <li>
      <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    </li>
  <?php endwhile;
endif;

// ループをリセット(他のループに影響しないように)
wp_reset_postdata();
?>

この書き方は、サイドバーやトップページの一部分など、特定の場所だけで使いたいときに便利です。
cat の値を変更すれば、別のカテゴリーを簡単に指定できます。

2.query_postsを使う方法(非推奨)

<?php
// カテゴリーIDが5の投稿だけを取得
query_posts('cat=5&posts_per_page=5');

if (have_posts()) :
  while (have_posts()) : the_post(); ?>
    <li>
      <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    </li>
  <?php endwhile;
endif;

// ループをリセット
wp_reset_query();
?>

query_posts はシンプルですが、メインループを書き換えてしまうので非推奨とされています。
可能であれば、より柔軟で安全な WP_Query を使うことをおすすめします。

固定ページやサイドバーに埋め込む方法

特定カテゴリの記事一覧を「固定ページの本文内」や「サイドバーのウィジェット」に埋め込みたい場合は、以下の方法が使えます。

1.固定ページにショートコードで埋め込む方法

functions.php を編集せずに、その場で使える方法です。
以下のコードを 任意の場所(例えばテーマの template-parts や固定ページテンプレート) に記述します。

<?php
$args = array(
  'cat' => 3,             // 表示したいカテゴリーID
  'posts_per_page' => 5,  // 件数
);

$query = new WP_Query($args);

if ($query->have_posts()) :
  echo '<ul class="category-list">';
  while ($query->have_posts()) : $query->the_post();
    echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
  endwhile;
  echo '</ul>';
endif;

wp_reset_postdata();
?>

固定ページのカスタムテンプレートを作成して、このコードを差し込めば「その固定ページにだけ」カテゴリ別の新着記事を出せます。

2.サイドバーにウィジェットで表示する方法(カスタムHTML)

管理画面から 外観 → ウィジェット → カスタムHTML を選び、以下のようにコードを埋め込みます。

<ul>
<?php
$args = array(
  'cat' => 7,             // カテゴリーID
  'posts_per_page' => 5,  // 件数
);

$query = new WP_Query($args);

if ($query->have_posts()) :
  while ($query->have_posts()) : $query->the_post();
    echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
  endwhile;
endif;

wp_reset_postdata();
?>
</ul>

サイドバーやフッターに「お知らせ」「キャンペーン情報」など特定カテゴリを出す時に便利です。

3.プラグインを使う方法(コード不要)

Display Posts」というプラグインを使えば、ショートコードで簡単にカテゴリ指定ができます。

引用:https://ja.wordpress.org/plugins/display-posts-shortcode/

コード例

[display-posts category="news" posts_per_page="5"]

コードに自信がない初心者の方や、テーマを直接編集したくない場合におすすめです。

WP_Queryでよく使う指定パターン集

1. 投稿タイプを指定する

$args = array(
  'post_type' => 'post', // 投稿
  // 'post_type' => 'page', // 固定ページ
  // 'post_type' => 'custom_post', // カスタム投稿タイプ
  'posts_per_page' => 5
);
$query = new WP_Query($args);

👉 投稿・固定ページ・カスタム投稿を切り替えて取得可能。

2. 投稿数を指定する

$args = array(
  'posts_per_page' => 10 // 取得する件数
);

👉 -1 を指定すると全件取得できます。

3. カテゴリを指定する

$args = array(
  'cat' => 3 // IDが3のカテゴリを取得
);

👉 cat にマイナスを付けると「除外」になります。

4. 複数カテゴリを指定する

$args = array(
  'category__in' => array( 3, 7 ) // ID3と7を含む
);

👉 category__not_in で「除外」にもできます。

5. タグを指定する

$args = array(
  'tag' => 'wordpress' // スラッグで指定
);

👉 複数の場合は tag__intag__not_in を使います。

6. 特定の投稿を含める/除外する

$args = array(
  'post__in'  => array( 12, 34, 56 ), // IDで指定
  'orderby'   => 'post__in'
);

$args = array(
  'post__not_in' => array( 12, 34 ) // IDで除外
);

7. 並び順を指定する

$args = array(
  'orderby' => 'date', // 日付順
  'order'   => 'DESC'  // 降順(新しい順)
);

👉 orderby には title, rand, meta_value なども指定可能。

8. カスタムフィールドで絞り込む

$args = array(
  'meta_key'   => 'price',
  'meta_value' => '1000'
);

👉 meta_query を使うと範囲指定もできます。

9. カスタム分類(タクソノミー)で絞り込む

$args = array(
  'tax_query' => array(
    array(
      'taxonomy' => 'genre',
      'field'    => 'slug',
      'terms'    => array( 'music', 'movie' ),
    ),
  ),
);

👉 カスタム投稿タイプとセットで使うことが多いです。

10. 特定のページネーションに対応する

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

$args = array(
  'posts_per_page' => 5,
  'paged'          => $paged
);

👉 ページャーを実装する場合に必須です。

WP_Queryでよく使う指定パターン集まとめ

  • カテゴリ・タグの指定/除外cat, category__in, category__not_in
  • 投稿IDで指定/除外post__in, post__not_in
  • 並び順orderby, order
  • カスタムフィールド/タクソノミーmeta_query, tax_query
  • ページネーション対応paged

まとめ|特定カテゴリーの新着記事はWP_Queryで柔軟に制御できる

  • WP_Query を使えば、特定のカテゴリーだけを取得したり、逆に除外したり、件数や順序まで細かく制御可能です。
  • query_posts は簡単ですが、推奨されていないため基本は WP_Query を利用しましょう。
  • コードを書かずに実装したい場合は、ウィジェットや専用プラグインを使えば初心者でも安心です。

特定カテゴリの記事一覧は、トップページやサイドバーに配置すると ユーザーの回遊率向上やSEO効果 にもつながります。

用途に応じて コードで柔軟に対応するか、プラグインで手軽に実装するか を選んで活用してみてください。

この記事を書いた人
管理人

2012年にWebデザインの勉強を始め、2013年より制作会社に勤務。
これまでに500件以上のWebサイト制作・運用に携わってきました。
現在も制作会社に勤務しながら、Webデザインスクールのトレーナーとしても後進の育成に取り組んでいます。
WordPressやデザインの実践的なノウハウを、初心者にもわかりやすく発信できるよう試行錯誤しています。

管理人をフォローする
WordPress
スポンサーリンク
管理人をフォローする

コメント

タイトルとURLをコピーしました