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」というプラグインを使えば、ショートコードで簡単にカテゴリ指定ができます。

コード例
[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__in
や tag__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効果 にもつながります。
用途に応じて コードで柔軟に対応するか、プラグインで手軽に実装するか を選んで活用してみてください。
コメント