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

2025.02.27.

WordPress

X Facebook Pocket LINE はてブ

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

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

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

 

経歴: 映像制作の専門学校を卒業後、映像制作(編集・撮影)でのアシスタント、カーナビゲーション用の3DCG制作、PS2用の3DCGゲーム背景制作、16ミリフィルムのデジタル変換業務等を経てWEB制作部門のある会社に就職。株式会社TREVOでディレクション、SEO対策、CMS開発、3DCG制作、映像制作を担当

X Facebook Pocket LINE はてブ

関連の記事

お問い合わせ
CONTACT

ホームページ制作に関することなら
お気軽にご相談ください

お電話でのお問い合わせはこちら

0120-838-567

平日9:00~18:00まで 定休日:土 日 祝