WordPressで記事を特定の条件で取得し、表示したいと考えたことはありませんか?例えば、「特定のカテゴリーの最新記事を5件表示したい」「カスタム投稿タイプの記事をランダムに表示したい」といった場合です。
これらの要件を満たすために最もよく使われるのが、WP_Query というWordPressの強力なクラスです。この記事では、WP_Query の基本的な使い方から、カスタム投稿タイプやタクソノミーで絞り込む応用的な方法まで解説します。
1. WP_Queryの基本:記事を取得する
WP_Query を使うには、まず取得したい記事の条件を配列($args)で指定します。その後、その配列を new WP_Query() に渡してインスタンス化します。
基本的な使い方(最新の投稿を5件取得する例)
<?php
// 取得する記事の条件を配列で指定
$args = array(
'post_type' => 'post', // 投稿タイプ
'posts_per_page' => 5, // 取得件数
'orderby' => 'date', // 並び替えの基準
'order' => 'DESC', // 降順
);
// WP_Queryをインスタンス化
$the_query = new WP_Query($args);
// 記事が見つかった場合のループ処理
if ($the_query->have_posts()) {
while ($the_query->have_posts()) {
$the_query->the_post();
?>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<p><?php the_excerpt(); ?></p>
<?php
}
} else {
// 記事が見つからなかった場合の処理
echo '<p>記事が見つかりませんでした。</p>';
}
// 投稿データのグローバル変数をリセットする
wp_reset_postdata();
?>
【重要】 wp_reset_postdata() を忘れずに! WP_Query で新しいループを回した後は、必ず wp_reset_postdata() を呼び出して、WordPressのグローバル投稿データを元の状態に戻す必要があります。これを怠ると、メインクエリに影響が出て、サイト表示に不具合が生じる可能性があります。
2. よく使う $args のパラメータ
$args 配列には、記事の取得方法を細かく指定するための多くのパラメータがあります。以下に代表的なものを紹介します。
posts_per_page: 1ページあたりの記事数category_name: カテゴリーのスラッグで絞り込みtag: タグのスラッグで絞り込みorderby: 並び順の基準(date,title,randなど)order: 昇順(ASC)か降順(DESC)かpaged: ページネーションで現在のページ番号を取得
例:カテゴリーとタグで絞り込む
$args = array(
'posts_per_page' => 10,
'category_name' => 'news', // カテゴリースラッグが 'news' の記事
'tag' => 'important', // タグスラッグが 'important' の記事
);
3. カスタム投稿タイプやカスタムフィールドの場合
WordPressはカスタム投稿タイプやカスタムフィールドを使うことで、より柔軟なサイト構築が可能です。WP_Query はこれらにももちろん対応しています。
カスタム投稿タイプの記事を取得する
カスタム投稿タイプ名が event の場合、post_type にその名前を指定するだけです。
$args = array(
'post_type' => 'event',
'posts_per_page' => 5,
'orderby' => 'date',
'order' => 'DESC',
);
$the_query = new WP_Query($args);
カスタムタクソノミーで絞り込む
カスタム投稿タイプ event に 'event_category' というカスタムタクソノミーがあり、そのターム(スラッグ)が 'seminar' の記事を取得したい場合は、tax_query を使います。
$args = array(
'post_type' => 'event',
'posts_per_page' => 10,
'tax_query' => array(
array(
'taxonomy' => 'event_category',
'field' => 'slug',
'terms' => 'seminar',
),
),
);
$the_query = new WP_Query($args);
カスタムフィールドの値で絞り込む
カスタムフィールドのキーが event_date、値が 2025-08-01 の記事を取得する場合、meta_query を使います。
$args = array(
'post_type' => 'event',
'meta_query' => array(
array(
'key' => 'event_date',
'value' => '2025-08-01',
'compare' => '=',
'type' => 'DATE'
),
),
);
$the_query = new WP_Query($args);
4. functions.php で再利用可能な形にする
同じようなクエリを何度も書くのは手間がかかりますし、コードの重複も発生します。functions.php に専用の関数を作成しておけば、テーマのどのファイルからでも簡単に呼び出せるようになり、保守性も高まります。
汎用的なクエリ関数を作成する
/**
* カスタム引数でWP_Queryを実行する関数
* @param array $args WP_Queryの引数配列
* @return WP_Query
*/
function get_custom_posts($args = array()) {
$default_args = array(
'post_type' => 'post',
'posts_per_page' => 5,
'orderby' => 'date',
'order' => 'DESC',
);
// デフォルト引数とカスタム引数をマージ
$merged_args = array_merge($default_args, $args);
return new WP_Query($merged_args);
}
関数の使い方
<?php
// カスタム投稿タイプ 'event' の最新3件の記事を取得
$event_query = get_custom_posts(array(
'post_type' => 'event',
'posts_per_page' => 3
));
if ($event_query->have_posts()) {
while ($event_query->have_posts()) {
$event_query->the_post();
// ループ内の処理
}
}
wp_reset_postdata();
?>
まとめ
WP_Query はWordPressテーマ開発の核となる機能の一つです。$args 配列を適切に設定することで、標準の投稿はもちろん、カスタム投稿タイプやタクソノミー、カスタムフィールドを使った複雑な条件でも、柔軟に記事を取得することができます。





