特定のカテゴリ記事一覧を表示する方法(WordPress)

投稿日:2025.02.27.
更新日:2025.04.12.

WordPress

株式会社TREVOの月額制ホームページ制作サービス
PR

板浪 雅樹
執筆・編集 板浪 雅樹

2005年から WEB 業界一筋。500サイト超を手がける SEO・WordPress のエキスパート。「公開後こそ本番」を掲げ、データ分析とユーザー視点で成果を引き出す運用を提案。

2005年に制作会社へ入社後、プログラマーからキャリアをスタート。サーバー構築・データベース設計で培った技術を強みに、WordPress テーマ/プラグイン開発やサイト移行の難案件を多数担当してきました。
2010年以降は SEO エンジニアとしても活動領域を拡大。コンテンツ設計・内部リンク最適化・高速化チューニングにより、競合の激しいビッグキーワードで上位獲得を実現してきました。
現在は TREVO のウェブディレクターとして、要件定義から運用改善まで一気通貫でリード。AI ライティングや GA4/Looker Studio を活用したレポーティング手法を開発し、「数字で説明できるサイト運用」をポリシーにクライアントの ROI 最大化を支援しています。
趣味/強み:筋トレとランニングで日々の集中力をキープ。複雑な課題を“仕組み”で解決するのが得意。
モットー:「サイトは資産。改善を止めた瞬間から価値は目減りする」

WordPressで特定のカテゴリ記事一覧を表示したい場合、さまざまな方法があります。
ここでは代表的な2つの方法である、get_posts と query_posts を紹介します。

ただし、一般的に新しいテーマ開発やカスタマイズでは、query_posts よりも WP_Query や get_posts を使うことが推奨されています。
なぜなら、query_posts はメインクエリを直接書き換えてしまうため、ページネーション(ページ送り)が正しく動作しなくなる場合があるからです。
そのため、基本的には get_posts もしくは WP_Query を使うことをおすすめします。

get_posts で取得する場合

get_posts は単純にデータを取得するためだけの関数で、ループ終了後に wp_reset_postdata() を使って投稿データをリセットするのが一般的です(the_post() などを使わない場合は不要なケースもあります)。

<?php
$posts = get_posts(array(
  'post_type'      => 'post',    // 投稿タイプ(デフォルトは 'post')
  'posts_per_page' => 10,        // 表示件数
  'category'       => '1',       // カテゴリIDまたはスラッグ(必要がなければ削除)
  'orderby'        => 'date',    // 表示順の基準
  'order'          => 'DESC'     // 昇順・降順
));

// 取得した投稿データがあるか確認
if ( $posts ) :
  foreach ( $posts as $post ) :
    setup_postdata($post);
?>
    <!-- 表示したい内容をここに書きます -->
    <h2><?php the_title(); ?></h2>
    <p><?php the_excerpt(); ?></p>

<?php
  endforeach;
  // グローバル変数 $post を元に戻す
  wp_reset_postdata();
endif;
?>

ポイント

  • post_type にカスタム投稿タイプのスラッグ(例:my_custom_post)を指定することで、カスタム投稿からの取得も可能です。
  • category パラメータにはカテゴリID、またはカテゴリスラッグを指定します。
    • たとえば、カテゴリスラッグが news であれば 'category' => 'news' と書けます。
  • ループ終了後には wp_reset_postdata() を呼び出すことで、グローバルな $post 変数が元の状態に戻ります。
  • さらに細かく制御したい場合は、tax_query などを使用して特定のタクソノミーを条件に絞ることもできます。

query_posts で取得する場合

query_posts はメインクエリを上書きするため、推奨されないことが多いです。どうしてもメインクエリを上書きしたい特別な事情がある場合にのみ利用します。
以下のように非常に簡潔に特定カテゴリの記事を取得できます。

<?php query_posts('cat=1&showposts=10'); ?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
  <!-- 表示したい内容をここに書きます -->
  <h2><?php the_title(); ?></h2>
  <p><?php the_excerpt(); ?></p>
<?php endwhile; endif; ?>
<?php wp_reset_query(); ?>
  • cat=1 はカテゴリIDを 1 と指定している例です。
  • showposts=10 は表示件数を 10 に設定しています。
  • ループ終了後には wp_reset_query() を使用し、メインクエリを元に戻します。

query_posts を使う際の注意点

  • query_posts() はメインクエリを上書きするため、ページネーション(ページ送り)が崩れる、または意図しない動作を引き起こす場合があります。
  • WordPress 公式ドキュメントでも query_posts は非推奨で、 WP_Query クラスを使用する方法が推奨されています。

さらにおすすめ:WP_Query で取得する場合

実際の開発現場では、get_posts よりも細かく制御できる WP_Query がよく使われています。ページネーションや条件分岐をきめ細かく行う場合に便利です。

<?php
$args = array(
  'post_type'      => 'post',
  'posts_per_page' => 10,
  'category_name'  => 'news',     // カテゴリスラッグの場合は 'category_name' を使用
  'orderby'        => 'date',
  'order'          => 'DESC'
);

$the_query = new WP_Query( $args );

if ( $the_query->have_posts() ) :
  while ( $the_query->have_posts() ) : $the_query->the_post();
?>
    <!-- 表示したい内容をここに書きます -->
    <h2><?php the_title(); ?></h2>
    <p><?php the_excerpt(); ?></p>

<?php
  endwhile;
  // 投稿データをリセット
  wp_reset_postdata();
endif;
?>
  • category_name にスラッグを設定できるほか、cat に数値IDを指定することも可能です。
  • WP_Query では複数のカテゴリや複数のタクソノミーを指定するなど、柔軟な絞り込みが可能になります。

まとめ

  • シンプルに特定カテゴリの記事を取得したい場合は、get_posts で十分対応できます。
  • ページネーション(ページ送り)を使いたい場合や高度なクエリ制御が必要な場合は、 WP_Query を使うのがおすすめです。
  • query_posts はメインクエリを書き換えるため、基本的には非推奨である点に注意してください。

WordPress でカテゴリを指定して投稿を一覧表示するときは、目的と要件に応じて適切なメソッドを選択するのがポイントです。

以上、特定のカテゴリ記事一覧を表示する際のサンプルコードと注意点でした。

 

関連の記事

CONTACT

ホームページ制作・Web制作に関するご質問やご相談は、
下記フォームよりお問い合わせください。

無料のお見積りや初回のご相談も承っておりますので、「まだ検討中」「ちょっと話を聞いてみたい」といった段階でも大歓迎です。
現状のホームページ診断も無料で実施中です。

0120-83-8567
平日9:00~18:00まで 定休日:土 日 祝