
WordPressで記事やカスタム投稿を自由に取得したいとき、欠かせないのが WP_Query クラスです。中でも、パラメーターの指定方法を理解すれば、表示件数・並び順・カテゴリー・カスタムフィールドなどを自在にコントロールできます。
この記事では、WP Queryのパラメーター一覧と実用スニペットに特化して紹介します。すぐに使えるコード例を参考に、効率的なカスタマイズにお役立てください。
WP Query 基本の書き方
WP_Query は配列で条件を渡します。以下のようなコードの書き方が一般的です。
$args = array(
'post_type' => 'post',
'posts_per_page' => 5,
'cat' => '10',
'tag' => 'tagslug',
'category_name' => 'cat1',
'order' => 'ASC',
'orderby' => 'modified',
'post__not_in' => array(get_the_ID()),
);
$query = new WP_Query( $args );投稿取得系パラメーター
記事タイプやステータス、特定の投稿を指定・除外することもできます。
$args = array(
'post_type' => 'custom_post', // 投稿タイプ
'post_status' => 'publish', // 公開のみ
'post__in' => array(12, 34), // 特定IDのみ
'post__not_in'=> array(56, 78), // 特定IDを除外
);
$query = new WP_Query( $args );post_type
指定できる値は、'post'(通常の投稿)、 'page'(固定ページ)、'カスタム投稿スラッグ'。
初期値は 'post' 。
複数指定もできます。
'post_type' => array('type01','type02'),post_status
「公開」や「非公開」といった投稿の表示状態を指定して表示させるのが 'post_status' です。
指定できる値
'publish'– 公開中'pending'– 承認待ち'draft'– 下書き'auto-draft'– コンテンツのない新しく投稿された投稿(作成途中で自動保存された投稿)'future'– 予約投稿'private'– 非公開'inherit'– 投稿の添付ファイルやリビジョンに割り当てられるステータス。実際のステータスは親投稿のステータス。'trash'– ゴミ箱にある'any'–'inherit','trash','auto-draft'を除く全ての状態。カスタム投稿で'exclude_from_search'がtrue に設定されている場合も除外される。
初期値は 'publish' 、ログインしている場合は 'private' も追加される。
ログイン時にも非公開記事を表示させたくない時には 'post_status' => 'publish', を追加することで、公開記事のみに限定して表示させることができます。
post__in, post__not_in
post__in は特定の投稿のみ、post__not_in は除外したい投稿を指定します。
post__not_in は、個別ページに関連記事を表示させる際に、現在の投稿ページを除外する、という場合などによく使います。
'post__not_in' => array(get_the_ID()), のような書き方や、グローバル変数 $post を利用して以下のように書くこともできます。
global $post;
$args = array(
'post_type' => 'post',
'posts_per_page' => 3,
'orderby' => 'rand',
'post__not_in' => array($post->ID),
);表示件数・並び順パラメーター
記事の件数や並び順に関するパラメーターです。
$args = array(
'posts_per_page' => 10, // 1ページに10件
'paged' => get_query_var('paged', 1), // ページネーション対応
'orderby' => 'date', // 並び順(date, title, randなど)
'order' => 'DESC', // 昇順: ASC, 降順: DESC
);
$query = new WP_Query( $args );posts_per_page
1ページに表示させたい最大投稿数を指定します。全件表示させたい場合は、’-1′ にします。
orderby 例:date, title, meta_value, rand, meta_value_num
‘order’, ‘orderby’ : 投稿の並び順を指定する
記事一覧の表示順序を指定するために使用するのがこの2つです。
| order | 降順(DESC)、昇順(ASC)のどちらかを指定。(初期値は 'DESC')orderbyで設定した内容の昇順・降順が表示される。 |
| orderby | 「どの順序で並び替えるか」を指定。2つ以上でも設定可。'date' …投稿日の日付順(初期値)'modified' …編集日の日付順'rand' …ランダムな並び順 |
カテゴリー・タクソノミー系パラメーター
特定カテゴリーやタクソノミー条件で取得します。
$args = array(
'category_name' => 'news', // カテゴリースラッグ
'tag' => 'campaign', // タグスラッグ
'tax_query' => array(
array(
'taxonomy' => 'genre', // カスタムタクソノミー
'field' => 'slug',
'terms' => array('drama', 'comedy'),
),
),
);
$query = new WP_Query( $args );cat, category_name
カテゴリーを指定したい場合に使用するのがこれらのパラメーターです。値の指定方法が異なるので覚えておきましょう。
私はIDは覚えられないけどスラッグ名は覚えていることが多いので、 category_name をよく使用します。
| cat | 「カテゴリーID」を指定する。 |
| category_name | 「カテゴリースラッグ」を指定する。 |
タグから記事を指定する : ‘tag’
タグを指定する場合はスラッグで指定します。
'tag' => 'tagslug',IDで指定する場合は 'tag_id' というパラメーターを使用します。
'tag_id' => 10,tax_query
tax_query パラメーターは、タクソノミーやそのタームから特定の投稿を絞り込むことができます。
初期の「カテゴリー」や「タグ」などの分類以外の取得や複数の条件を細かく指定する際に使用します。
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'brand',
'field' => 'slug',
'terms' => 'nike',
),
array(
'taxonomy' => 'clothing_type',
'field' => 'term_id',
'terms' => array( 103, 115, 206 ),
'operator' => 'NOT IN',
),
),relation | 複数のタクソノミー配列を指定する時の論理関係。指定可能な値は「AND」、「OR」です。'AND' … 全ての条件に一致'OR' … いずれかの条件に一致タクソノミー配列が1つの場合は不要です。 |
taxonomy | タクソノミー名を指定 |
field | タームをどの値で指定するか。 指定可能な値:「term_id」、「name」、「slug」、「term_taxonomy_id」。 デフォルト:「term_id」。 |
terms | タームを指定 |
include_children | 階層型分類に子を含めるかどうか。デフォルトは true。 |
operator | ターム配列の演算子。 指定できる値:「IN」、「NOT IN」、「AND」、「EXISTS」、「NOT EXISTS」。 デフォルト:「IN」。 |
カスタムフィールド系パラメーター
特定のカスタムフィールド条件で絞り込みます。
$args = array(
'meta_key' => 'price',
'meta_value' => '1000', // 単一条件
);
// 複数条件
$args = array(
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'price',
'value' => 1000,
'compare' => '>=',
'type' => 'NUMERIC',
),
array(
'key' => 'stock',
'value' => 1,
'compare' => '>',
'type' => 'NUMERIC',
),
),
);
$query = new WP_Query( $args );meta_query で使うデータ型と比較演算子
| データ型 | 内容 |
|---|---|
| CHAR | 文字 |
| NUMERIC | ‘SIGNED’の別名 |
| DECIMAL | 浮動小数点数 |
| SIGNED | 整数(符号あり) |
| UNSIGNED | 整数(符号なし) |
| DATE | 日付 |
| DATETIME | 日時 |
| TIME | 時刻 |
| BINARY | バイナリー |
| 比較演算子 | 内容 |
|---|---|
| = | 一致する |
| != | 一致しない |
| > | より大きい |
| >= | 以上 |
| < | より小さい |
| <= | 以下 |
| LIKE | 指定した文字列に一致 |
| NOT LIKE | 指定した文字列に一致しない場合 |
| IN | (配列)で指定したどれかに一致する |
| NOT IN | (配列)で指定したどれにも一致しない |
| BETWEEN | 2つの値で指定した範囲内(境界を含む) |
| NOT BETWEEN | 2つの値で指定した範囲外 |
日付・時間系パラメーター
投稿日を基準に取得します。
$args = array(
'date_query' => array(
array(
'after' => '2025-01-01',
'before' => '2025-12-31',
'inclusive' => true,
),
),
);
$query = new WP_Query( $args );投稿者・権限系パラメーター
投稿者を指定します。
$args = array(
'author' => 3, // 投稿者ID
'author_name' => 'taro', // 投稿者スラッグ
);
$query = new WP_Query( $args );複合条件の組み合わせ例
実用的な条件例を2つ。
【カスタム投稿+タクソノミー+並び替え】
$args = array(
'post_type' => 'product',
'tax_query' => array(
array(
'taxonomy' => 'brand',
'field' => 'slug',
'terms' => 'nike',
),
),
'orderby' => 'meta_value_num',
'meta_key'=> 'price',
'order' => 'ASC',
);
$query = new WP_Query( $args );【カスタムフィールド+日付条件】
$args = array(
'meta_query' => array(
array(
'key' => 'featured',
'value' => 'yes',
),
),
'date_query' => array(
array(
'after' => '2025-01-01',
),
),
);
$query = new WP_Query( $args );カテゴリー : WordPress
タグ :





