22:00よりサイトのメンテナンスを開始します×

エーデルハーツ

Custom WordPress Support & Development

WordPress開発者向けチートシート:WP_Queryの主要パラメータ

WordPressで特定の条件に一致する投稿を取得する際に不可欠なのがWP_Queryクラスです。このクラスは非常に多くのパラメータ(引数)を受け付けるため、その全てを記憶するのは大変です。この記事では、WP_Queryでよく使われる主要なパラメータをチートシートとしてまとめ、それぞれの利用頻度や簡単なサンプルコードを交えて解説します。

WP_Queryをマスターすることは、WordPressテーマやプラグイン開発において、より柔軟で強力なコンテンツ表示を実現するための鍵となります。

WP_Queryの基本的な使い方

WP_Queryを使用する基本的な流れは以下のようになります。

この$args配列に指定できるパラメータが今回のチートシートの主役です。

主要パラメータ一覧

以下に、WP_Queryで使用できる主要なパラメータを機能別に分類しました。各パラメータの説明の冒頭には、その利用頻度や重要度を星の5段階評価で示しています。星の数の目安は以下の通りです。
★★★★★:ほぼ全ての開発で頻繁に利用され、基本かつ非常に重要なパラメータ
★★★★☆:高頻度で利用され、多くの一般的なカスタマイズで役立つ重要なパラメータ
★★★☆☆:中程度の頻度で利用され、特定の機能を実現する際に便利なパラメータ
★★☆☆☆:利用頻度はやや低めですが、特定の要件や細かな制御を行いたい場合に役立つパラメータ
★☆☆☆☆:利用頻度は低く、非常に限定的な状況や高度なカスタマイズでのみ使用されるパラメータ

カテゴリ パラメータ名 説明 一般的な値の例
投稿タイプ関連 post_type ★★★★★
取得する投稿タイプを指定します。
'post', 'page', 'my_custom_post_type', array('post', 'page')
post_status ★★★☆☆
取得する投稿のステータスを指定します。
'publish', 'pending', 'draft', 'future', 'private', array('publish', 'future')
any ★★☆☆☆
post_typeに指定すると、全ての投稿タイプ(一部システム内部のものを除く)を取得します。
'any'
投稿数・順序関連 posts_per_page ★★★★★
1ページあたりに表示する投稿数を指定します。-1を指定すると全件取得します。
10, 5, -1
nopaging ★★☆☆☆
trueに設定すると、ページネーションを無視して全ての投稿を取得します (posts_per_page = -1 と同様の効果)。
true, false (デフォルト)
orderby ★★★★★
投稿の並び順の基準を指定します。
'date', 'title', 'modified', 'ID', 'rand', 'comment_count', 'menu_order', 'meta_value', 'meta_value_num'
order ★★★★★
投稿の並び順(昇順・降順)を指定します。orderbyとセットで使います。
'ASC' (昇順), 'DESC' (降順)
meta_key ★★★☆☆
orderby'meta_value'または'meta_value_num'を指定した場合に、並び替えの基準となるカスタムフィールドのキーを指定します。
'price', 'event_date'
offset ★★☆☆☆
指定した数だけ投稿をスキップして取得します。ページネーションとは別に使います。
3 (最初の3件をスキップ)
paged ★★★☆☆
ページネーションで現在のページ番号を指定します。
get_query_var('paged'), get_query_var('page')
タクソノミー関連 cat ★★★☆☆
カテゴリーIDを指定して、そのカテゴリーに属する投稿を取得します。
5, -5 (ID:5を除外)
category_name ★★★☆☆
カテゴリースラッグを指定します。
'news', 'event/featured'
tag ★★★☆☆
タグスラッグを指定します。
'wordpress', 'php'
tag_id ★★☆☆☆
タグIDを指定します。
12
tax_query ★★★★★
複数のタクソノミー条件を組み合わせて指定します。非常に強力です。
下記サンプルコード参照
relation ★★★☆☆
tax_query内で複数のタクソノミー条件を指定した場合の関係性(ANDまたはOR)を指定します。
'AND', 'OR' (デフォルトは’AND’)
カスタムフィールド関連 meta_key ★★★☆☆
特定のカスタムフィールドキーを持つ投稿を取得します。値の指定はmeta_valueで行います。
'product_color'
meta_value ★★★☆☆
meta_keyで指定したカスタムフィールドの値を指定します。
'red'
meta_value_num ★★☆☆☆
meta_keyで指定したカスタムフィールドの値を数値として比較する場合に使います。
100
meta_compare ★★★☆☆
カスタムフィールドの値の比較方法を指定します。
'=', '!=', '>', '<', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'EXISTS', 'NOT EXISTS'
meta_query ★★★★★
複数のカスタムフィールド条件を組み合わせて指定します。tax_queryと同様に強力です。
下記サンプルコード参照
投稿ID・スラッグ関連 p ★★★☆☆
投稿IDを指定して、単一の投稿を取得します。
123
name ★★★☆☆
投稿スラッグを指定して、単一の投稿を取得します。
'hello-world'
post__in ★★★☆☆
指定した投稿IDの配列に一致する投稿のみを取得します。
array(2, 4, 6)
post__not_in ★★★☆☆
指定した投稿IDの配列を除外して投稿を取得します。
array(1, 3, 5)
日付関連 year ★★☆☆☆
年を指定します (例: 2025)。
2025
monthnum ★★☆☆☆
月を数値で指定します (1-12)。
12 (12月)
date_query ★★★☆☆
より複雑な日付条件(期間指定など)を指定します。
下記サンプルコード参照
著者関連 author ★★★☆☆
著者IDを指定します。
1
author_name ★★☆☆☆
著者名(user_nicename)を指定します。
'admin'
検索関連 s ★★★☆☆
検索キーワードを指定します。
'WordPress astra'
exact ★☆☆☆☆
sパラメータでの検索時に完全一致検索を行うか (true)、部分一致検索を行うか (false、デフォルト) を指定します。
true
sentence ★☆☆☆☆
sパラメータでの検索時に、フレーズ全体として検索するか (true)、各単語で検索するか (false、デフォルト) を指定します。
true
キャッシュ関連 cache_results ★★☆☆☆
クエリ結果をキャッシュするかどうかを指定します。デフォルトはtrue
true, false
update_post_meta_cache / update_post_term_cache ★★☆☆☆
投稿メタデータやタームメタデータをキャッシュするかどうか。デフォルトはtrue。大量の投稿を処理する際にfalseにするとパフォーマンス改善が見込める場合があります。
true, false

サンプルコード集

いくつかの一般的なユースケースに対応するサンプルコードを紹介します。

1. 特定のカスタム投稿タイプから最新5件の記事を取得

2. 複数のタクソノミー条件(カテゴリーとタグ)で絞り込み

「イベント」カテゴリーに属し、かつ「注目」タグが付いている投稿を取得します。

3. カスタムフィールドの値で絞り込み

カスタムフィールド「event_date」が今日以降の日付である投稿を、日付順(昇順)で取得します。

meta_querytype パラメータには 'NUMERIC', 'BINARY', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'SIGNED', 'TIME', 'UNSIGNED' が指定できます。

4. 複雑な日付条件で絞り込み (date_query)

2024年12月中に公開された投稿を取得します。

date_query では、year, month, day, week, hour, minute, second や、compare ('=', '>=' など), relation ('AND', 'OR') を使ってより詳細な期間指定が可能です。

よくある質問 (FAQ)

Q1: WP_Queryget_posts() の違いは何ですか?
A1: get_posts() は内部的に WP_Query を使用していますが、よりシンプルな引数で投稿の配列を直接返します。一方、WP_Query はオブジェクトを返し、ループ内で投稿データをセットアップする機能(the_post()など)やページネーション情報を保持します。複雑なクエリやメインループとは別のサブループを扱う場合は WP_Query が適しています。簡単なリスト取得なら get_posts() が手軽です。
Q2: wp_reset_postdata() はなぜ必要なのですか?
A2: WP_Query を使ってカスタムループを実行すると、グローバルな $post オブジェクトがそのループ内の投稿データで上書きされます。ループの後に wp_reset_postdata() を呼び出すことで、$post オブジェクトをメインクエリの現在の投稿データに復元します。これを怠ると、後続の処理や他のループ、テンプレートタグが予期せぬ動作をする可能性があります。
Q3: パフォーマンスを考慮する上で気をつけることは?
A3:

posts_per_page => -1 (全件取得) の使用は、投稿数が多い場合にメモリを大量に消費する可能性があるため慎重に検討してください。

複雑なmeta_querytax_queryもパフォーマンスに影響を与えることがあります。必要なデータだけを取得し、適切なインデックスがデータベースに設定されているか確認することも重要です。また、cache_results => falseupdate_post_meta_cache => false などのキャッシュ関連パラメータは、特定の状況下でのパフォーマンス改善に役立つことがありますが、通常はデフォルトのtrueのままで問題ありません。

まとめ

WP_Query はWordPressで動的なコンテンツ表示を行う上で非常に強力なツールです。この記事で紹介したパラメータはほんの一部ですが、これらを組み合わせることで、ほぼあらゆる条件で投稿データを取得し、表示することができるようになります。ぜひこのチートシートを活用して、WordPress開発の効率を上げてください。

私たちの活動拠点である埼玉県川越市を中心に、WordPressサイトのテクニカルサポート、カスタマイズ、トラブルシューティングのご相談を承っております。もちろん、川越に限らず、日本全国どちらからでもお気軽にご連絡ください。

WordPressカスタマイズ・プラグイン開発を気軽にご相談くださいね。もし、ご自身でWordPressの技術力をさらに高めたい、あるいはプロジェクトの技術的な壁打ち相手が必要だとお感じでしたら、WordPress顧問エンジニアサービスもご検討いただければ幸いです。