
WordPressで高度なカスタマイズを行う際に欠かせないのが「WP_Query」です。投稿の一覧を自由自在に取得できる一方、条件が複雑になると記述ミスもしばしば。本記事では、WP_Queryの基本から応用まで、条件別に実用的なカスタマイズ例を紹介します。コピペで使えるコード付きなので、日々の開発にぜひお役立てください。
目次
WP_Queryで使える主な引数一覧
キー | 説明 | 例 |
---|---|---|
post_type | 投稿タイプ | 'post' , 'page' , 'custom_post' |
posts_per_page | 取得件数(-1で全件) | 10 , -1 |
offset | スキップする件数 | 5 |
orderby | 並び替えの基準 | 'date' , 'title' , 'meta_value' など |
order | 並び順 | 'ASC' , 'DESC' |
paged | ページ番号(2ページ目以降) | get_query_var('paged') |
nopaging | ページングなし | true |
p / page_id | 投稿 / 固定ページ ID | 123 |
name / pagename | 投稿 / 固定ページのスラッグ | 'sample-post' |
post__in / post__not_in | 投稿ID配列の絞り込み | [1,2,3] |
cat / category_name | カテゴリー ID / スラッグ | 3 , 'news' |
category__in / category__not_in | 複数カテゴリー ID | [1,3,5] |
tag / tag_id | タグスラッグ / タグID | 'pickup' , 7 |
tag__in / tag__not_in | タグID配列 | [4,5] |
tax_query | カスタムタクソノミーの条件 | array(...) |
meta_key , meta_value , meta_compare , meta_type | カスタムフィールド(1条件) | 'price' , '>' など |
meta_query | カスタムフィールド(複数条件) | array(...) |
date_query | 日付での絞り込み | array(...) |
year , monthnum , day | 年・月・日指定 | 2024 , 5 , 15 |
s | キーワード検索 | '検索語' |
post_status | 投稿ステータス | 'publish' , 'draft' |
has_password | パスワード付き投稿か | true / false |
WP_Queryの基本構文
まずは基本の構文をおさらいしましょう。
$args = array(
'post_type' => 'post',
'posts_per_page' => 10,
);
$query = new WP_Query($args);
if ($query->have_posts()) :
while ($query->have_posts()) : $query->the_post();
the_title();
endwhile;
wp_reset_postdata();
endif;
カスタム投稿タイプを取得する
$args = array(
'post_type' => 'product', // カスタム投稿タイプ
'posts_per_page' => 5,
);
カテゴリーやタグで絞り込む
$args = array(
'category_name' => 'news', // スラッグ指定
);
$args = array(
'tag' => 'pickup',
);
複数カテゴリーに属する投稿を取得するには:
$args = array(
'category__and' => array(3, 5), // カテゴリーID
);
どれか一つのカテゴリーに属する投稿を取得するには:
$args = array(
'category__in' => array(3, 5), // カテゴリーIDのいずれかを含む
);
カスタムタクソノミーで絞り込む
$args = array(
'post_type' => 'product',
'tax_query' => array(
array(
'taxonomy' => 'genre',
'field' => 'slug',
'terms' => 'book',
),
),
);
複数のカスタムタクソノミーを AND 条件 で絞り込む:
$args = array(
'post_type' => 'product',
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'genre',
'field' => 'slug',
'terms' => 'book',
),
array(
'taxonomy' => 'color',
'field' => 'slug',
'terms' => 'blue',
),
),
);
複数のカスタムタクソノミーを OR 条件 で絞り込む:
$args = array(
'post_type' => 'product',
'tax_query' => array(
'relation' => 'OR',
array(
'taxonomy' => 'genre',
'field' => 'slug',
'terms' => 'book',
),
array(
'taxonomy' => 'color',
'field' => 'slug',
'terms' => 'blue',
),
),
);
特定の投稿を除外 or 含める
$args = array(
'post__not_in' => array(10, 15), // IDで除外
);
$args = array(
'post__in' => array(1, 3, 5), // IDで指定した投稿のみ取得
);
日付で絞り込む
$args = array(
'date_query' => array(
array(
'after' => '2024-01-01',
'before' => '2024-12-31',
'inclusive' => true,
),
),
);
メタ情報で絞り込む(カスタムフィールド)
数値で比較:
$args = array(
'meta_query' => array(
array(
'key' => 'price',
'value' => 1000,
'compare' => '>=',
'type' => 'NUMERIC',
),
),
);
一致する値を検索:
$args = array(
'meta_query' => array(
array(
'key' => 'status',
'value' => '公開中',
'compare' => '=',
),
),
);
部分一致(LIKE):
$args = array(
'meta_query' => array(
array(
'key' => 'description',
'value' => '特別',
'compare' => 'LIKE',
),
),
);
前方一致(LIKE + ワイルドカード):
$args = array(
'meta_query' => array(
array(
'key' => 'title',
'value' => '前方文字列%',
'compare' => 'LIKE',
),
),
);
複数の値に一致(IN):
$args = array(
'meta_query' => array(
array(
'key' => 'color',
'value' => array('red', 'blue'),
'compare' => 'IN',
),
),
);
NULLチェック(値が存在しない):
$args = array(
'meta_query' => array(
array(
'key' => 'discount',
'compare' => 'NOT EXISTS',
),
),
);
空文字列のチェック:
$args = array(
'meta_query' => array(
array(
'key' => 'note',
'value' => '',
'compare' => '=',
),
),
);
範囲検索(BETWEEN):
$args = array(
'meta_query' => array(
array(
'key' => 'price',
'value' => array(1000, 2000),
'compare' => 'BETWEEN',
'type' => 'NUMERIC'
),
),
);
複数条件をAND/ORで組み合わせる:
$args = array(
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'status',
'value' => '販売中',
'compare' => '=',
),
array(
'key' => 'stock',
'value' => 0,
'compare' => '<=',
'type' => 'NUMERIC'
)
)
);
並び順を変更する
$args = array(
'orderby' => 'meta_value_num',
'meta_key' => 'price',
'order' => 'DESC',
);
ランダム順で取得する:
$args = array(
'orderby' => 'rand',
);
ページネーション対応
$paged = get_query_var('paged') ? get_query_var('paged') : 1;
$args = array(
'paged' => $paged,
);
テンプレート側にて:
// ページナビゲーション表示
if (function_exists('wp_pagenavi')) {
wp_pagenavi(array('query' => $query));
}
まとめ:WP_Queryの条件指定を自在に使いこなそう
WP_Queryを使いこなすことで、WordPressの柔軟な情報表示が可能になります。特に複数の条件を組み合わせる場合や、カスタム投稿やタクソノミーを利用するサイトでは必須の知識です。本記事をチートシートとして活用し、開発のスピードアップと保守性向上にお役立てください。

Contact
ウェブサイトの制作や運用に関わる
お悩みやご相談
お気軽にお問い合わせ下さい
ウェブサイトと一口に言っても、企業サイトやECサイト、ブログ、SNSなど、その“カタチ”は目的に応じてさまざまであり、構築方法や使用する技術も大きく異なります。株式会社コナックスでは、お客様のご要望やブランドの個性を丁寧に汲み取り、最適なウェブサイトの“カタチ”をご提案いたします。
デザイン、ユーザビリティ、SEO対策はもちろん、コンテンツ制作やマーケティング戦略に至るまで、あらゆるフェーズでお客様のビジネスに寄り添い、成果につながるウェブサイトづくりをサポートいたします。私たちは、ウェブサイトの公開をゴールではなくスタートと捉え、お客様のビジネスの成功に向けて共に伴走してまいります。