WP Queryパラメーター一覧|WordPressカスタマイズ用スニペット

WordPressで記事やカスタム投稿を自由に取得したいとき、欠かせないのが WP_Query クラスです。中でも、パラメーターの指定方法を理解すれば、表示件数・並び順・カテゴリー・カスタムフィールドなどを自在にコントロールできます。

この記事では、WP Queryのパラメーター一覧と実用スニペットに特化して紹介します。すぐに使えるコード例を参考に、効率的なカスタマイズに役立ててください。

WP Query 基本の書き方

WP_Query は配列で条件を渡します。以下のようなコードの書き方が一般的です。

PHP
$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 );
PHP
$query = new WP_Query( 'post_type=post&monthnum=12&day=12' );

投稿タイプ・ステータス・特定の投稿

記事タイプやステータス、特定の投稿を指定・除外することもできます。

PHP
$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'

複数指定もできます。

PHP
'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 を利用して以下のように書くこともできます。

PHP
global $post;
$args = array(
  'post_type' => 'post',
  'posts_per_page' => 3,
  'orderby' => 'rand',
  'post__not_in' => array($post->ID),
);

表示件数・並び順パラメーター

記事の件数や並び順に関するパラメーターです。

PHP
$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′ にします。

‘order’, ‘orderby’ : 投稿の並び順を指定する

記事一覧の表示順序を指定するために使用するのがこの2つです。

order降順(DESC)、昇順(ASC)のどちらかを指定。(初期値は 'DESC'
orderbyで設定した内容の昇順・降順が表示される。
昇順(ASC)… 「1, 2, 3…」「a, b, c…」
降順(DESC)… 「…3, 2, 1」「…c, b, a」
orderby「どの順序で並び替えるか」を指定。2つ以上でも設定可。
「orderby」指定できる値
  • 'date' …投稿日の日付順(初期値)
  • 'modified' …最終更新日順
  • 'ID' …投稿ID順
  • 'title' …タイトル順
  • 'name' …投稿(スラッグ)名
  • 'rand' …ランダム順
  • 'author' …著者順
  • 'parent' …投稿/ページの親ID順
  • 'type' …投稿タイプ
  • 'comment_count' …コメント数
  • 'menu_order' …ページ順。
    「ページ属性の編集」ボックスの「順序」フィールドや、異なる menu_order 値を持つ任意の投稿タイプに使用可。
  • 'meta_value' …クエリには 'meta_key' も含まれている必要がある。ソートはアルファベット順のため、文字列(単語など)の場合は問題ないが、数値の場合は注意。
    例えば、「1、3、4、6、34、56」という数字で並び替えようとすると、「1、3、34、4、56、6」となる。
    数値の場合は代わりに 'meta_value_num' を使用。
    メタ値を特定の型にキャストしたい場合は 'meta_type' を指定する。指定できる値は $meta_query の場合と同様に、’NUMERIC’、’BINARY’、’CHAR’、’DATE’、’DATETIME’、’DECIMAL’、’SIGNED’、’TIME’、’UNSIGNED’ です。
  • 'meta_value_num' …数値メタ値。また、クエリには必ず 'meta_key' が含まれている必要がある。この値により、'meta_value' 同様、数値による並べ替えが可能になる。
  • 'relevance' …検索語句での順序
    • 1. 文全体が一致するかどうか。
    • 2. すべての検索語句がタイトル内に含まれているかどうか。
    • 3. 検索語句のいずれかがタイトルに含まれているかどうか。
    • 4. 文全体がコンテンツ内に含まれているかどうか。
  • 'post__in''post__in' 配列で指定された投稿IDの順序を維持。注意:orderパラメータの値は、順序を変更しない。
  • 'post_name__in''post_name__in' 配列で指定された投稿スラッグの順序を維持。注意:order パラメータの値は、順序を変更しない。
  • 'post_parent__in''post_parent__in' 配列で指定された投稿の親の順序を維持。注意:order パラメータの値は、順序を変更しない。

カテゴリー・タグ・タクソノミー

特定カテゴリーやタクソノミー条件で取得します。

PHP
$args = array(
  'category_name' => 'news', // カテゴリースラッグ
  'tag' => 'campaign', // タグスラッグ
  'tax_query' => array(
    array(
      'taxonomy' => 'genre', // カスタムタクソノミー
      'field' => 'slug',
      'terms' => array('drama', 'comedy'),
    ),
  ),
);
$query = new WP_Query( $args );

カテゴリー指定のパラメーター

カテゴリーを指定したい場合に使用するのがこれらのパラメーターです。値の指定方法が異なるので覚えておきましょう。
私はIDは覚えられないけどスラッグ名は覚えていることが多いので、 category_name をよく使用します。

cat「カテゴリーID」を指定する。
category_name「カテゴリースラッグ」を指定する。
category__and指定したカテゴリーすべて含める(カテゴリーID)
category__in指定カテゴリーのどれかに属する(カテゴリーID)
category__not_in指定したカテゴリーを含めない(カテゴリーID)

タグから記事を指定する : ‘tag’

タグを指定する場合はスラッグで指定します。

PHP
'tag' => 'tagslug',

IDで指定する場合は 'tag_id' というパラメーターを使用します。

PHP
'tag_id' => 10,

tax_query

tax_query パラメーターは、タクソノミーやそのタームから特定の投稿を絞り込むことができます。
初期の「カテゴリー」や「タグ」などの分類以外の取得や複数の条件を細かく指定する際に使用します。

PHP
'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」。

カスタムフィールド系パラメーター

特定のカスタムフィールド条件で絞り込みます。

PHP
$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(配列)で指定したどれにも一致しない
BETWEEN2つの値で指定した範囲内(境界を含む)
NOT BETWEEN2つの値で指定した範囲外

日付・時間系パラメーター

投稿の年・月・日といった日付、時・分・秒といった時間での指定ができます。

より細かく指定したい場合は date_query で設定できます。

PHP
$args = array(
  'date_query' => array(
    array(
      'after' => '2025-01-01',
      'before' => '2025-12-31',
      'inclusive' => true,
    ),
  ),
);

inclusive は、after, before で指定された値を含めるかどうかを設定します。
true: 含める、false: 含めない。

上記のコードなら、trueの場合、2025-01-01や2025-12-31の日付の投稿も含める、falseならこれらの日付の投稿は除外されます。

投稿者・権限系パラメーター

投稿者を指定します。

PHP
$args = array(
  'author' => 3, // 投稿者ID
  'author_name' => 'taro', // 投稿者スラッグ(user_nicename)
  'author__in' => array(1, 2, 3), // 投稿者ID(配列)
  'author__not_in' => array(1, 2, 3), // 除外する投稿者ID(配列)
);

複合条件の組み合わせ例

実用的な条件例を2つ。

【カスタムフィールド+日付条件】

ピックアップや特集といった投稿リストを表示させるイメージです。
「featured」フィールドが「yes」であり、「2025年01月01日」以降の投稿を表示させます。

PHP
$args = array(
  'meta_query' => array(
    array(
      'key' => 'featured',
      'value' => 'yes',
    ),
  ),
  'date_query' => array(
    array(
      'after' => '2025-01-01',
      'inclusive' => true,
    ),
  ),
);
$query = new WP_Query( $args );

【カスタム投稿+タクソノミー+並び替え】

カスタム投稿「product」から、「brand」タクソノミーの中のスラッグが「nike」である投稿。
「price」の低い値から順に表示されます。

PHP
$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 );

取得する投稿タイプとタクソノミーは同じで、別の条件をつけてみます。
2025年以上に発売され、価格が1000円から2000円のものを表示させるイメージです。

PHP
$args = array(
  'post_type' => 'product',
  'tax_query' => array(
    array(
      'taxonomy' => 'brand',
      'field' => 'slug',
      'terms' => 'nike',
    ),
  ),
	'meta_query'	=> array(
	  // 以下のどちらにも当てはまるように
		'relation'		=> 'AND',
		// 2025年以上に発売
		array(
			'key'		=> 'published',
			'value'		=> 2025,
			'type'		=> 'numeric',
			'compare'	=> '>',
		),
		// 価格が1000円から2000円
		array(
			'key'		=> 'price',
			'value'		=> array(1000, 2000),
			'type'		=> 'numeric',
			'compare'	=> 'BETWEEN',
		)
	)
);
$query = new WP_Query( $args );

カテゴリー : WordPress