フィールド名と保存値を調べ、条件を1つずつ追加しましょう
WP Query Builderでは、keyへフィールド名、valueへ保存値を入力します。地域の文字列ならCHAR、料金の数値比較ならNUMERICのように、保存形式に合わせてtypeを選びます。
まず開催地だけで絞り込み、次に料金と開催日を追加します。複数条件をすべて満たしたいときはANDです。生成後はWordPressの実データで取得結果を確かめましょう。
絞り込みたいイベントと、保存されている値を確認する
この記事では、イベント紹介を登録したカスタム投稿タイプworksを使います。最初は「東京で開催するもの」、最後は「東京・料金6万円以上・2026年9月1日以降の開催」という一覧を作ります。条件を増やしても、同じ3件のデータを使います。
worksや各フィールド名は検証サイトの例です。自分のサイトでは登録済みの名前に置き換えてください。通常の投稿を使う場合、投稿タイプはpostです。WP Query Builderで名前を入力しても、投稿タイプやフィールドが新しく登録されるわけではありません。
入力前に確認すること
- 1一覧に出したい投稿の種類と、絞り込みたい条件を決める
- 2対象の投稿を1件開き、地域・料金・開催日などの値を確認する
- 3ACFならフィールドグループでフィールド名を確認する
- 4表示名だけでなく、実際に保存される値と形式を調べる
ACFの表示ラベルとフィールド名は別です。「地域」と表示されていても、keyへ入れるのはareaというフィールド名です。 保存値も、画面の見た目どおりとは限りません。
この例で確認する名前と値は、次の組み合わせです。料金は単位やカンマを含めずに保存し、ACF Date Pickerの開催日は8桁のYmd形式で保存します。
| 表示や入力の例 | フィールド名 | 保存値の例 |
|---|---|---|
| 地域:東京 | area | tokyo |
| 価格:80000 | price | 80000 |
| 開催日:2026年9月5日 | event_date | 20260905 |
ACFのフィールドグループで「地域」を開くと、ラベル・フィールド名・選択肢を確認できます。tokyo : 東京の左側が保存値、右側が表示ラベルです。設定を確認するだけなら、値の変更や保存は不要です。

分離した検証環境の実画面です。実サイトでは自分のフィールド設定を確認してください。
フィールド名は分かっても、対象投稿に何が保存されているか分からない場合は、次の記事で実際の保存値を確かめる手順を確認できます。
保存値を調べるmeta_queryが効かない時のチェックリストフィールド名と対象投稿の保存値を照合し、条件に合うデータがあるか確かめるときに使います。
記事を読むmeta_queryの4項目で「地域が東京」という条件を作る
WP Query Builderで「詳細設定(全項目)」を選び、「Meta Query(カスタムフィールド)」を開きます。基本設定では投稿タイプをcustom、カスタム投稿タイプをworks、公開状態をpublish、表示件数を10にします。この記事では並び順もdate / DESCにそろえます。
最初の条件には、次の4項目を入力します。keyを入力すると、残りの欄が編集できるようになります。
| 入力欄 | 入力値 | 決めていること |
|---|---|---|
| key | area | 地域のフィールドを調べる |
| value | tokyo | 東京の保存値と比較する |
| compare | = | 指定した値と一致するものを探す |
| type | CHAR | 文字列として比較する |
WordPressではcompareの初期値は=、typeはCHARです。ここでは画面でも明示して、どの条件になったか確認します。「キー自体の比較(任意)」は使いません。
areaがtokyoのイベントだけを取得する
入力後、keyがarea、valueがtokyoになっているか見直しましょう。「東京」という表示ラベルをvalueへ入れる例ではありません。

地域の表示ラベルではなく保存値を入力します。この時点ではrelationの欄はありません。
公開中のWP Query Builderで、この入力から生成された未編集のコードです。この配列だけでは画面に一覧は表示されず、後半の完成例でWP_Queryへ渡します。
引数や処理の一部分だけを示した例です。このまま単独で貼らず、テンプレート内のWP_Queryとループへ組み込んでください。
$args = array( 'post_type' => 'works', 'post_status' => 'publish', 'posts_per_page' => 10, 'order' => 'DESC', 'orderby' => 'date', 'meta_query' => array( array( 'key' => 'area', 'compare' => '=', 'type' => 'CHAR', 'value' => 'tokyo' ) ), 'no_found_rows' => true, 'ignore_sticky_posts' => true, 'update_post_meta_cache' => false, 'update_post_term_cache' => false, 'lazy_load_term_meta' => false);確認するのは、meta_query内の4項目と、対象のpost_typeです。生成された件数・並び順・キャッシュ設定も省略せず載せています。この例は最大10件の一覧で、ページ送りは作りません。
CHARの=は、部分一致を探すLIKEとは違います。ただし、大文字・小文字を必ず区別する指定ではありません。データベースの照合順序によって一致の扱いが変わるため、厳密な区別が必要なら保存値と比較仕様を別に確認してください。
作成した条件は、本番と分けたWordPress環境で、想定したイベントだけが取得できるか確かめます。検証や公開に使うサーバーをこれから用意する場合は、XserverのPHP対応やバックアップ条件も確認できます。
条件を追加し、relationでAND・ORを選ぶ
開催地だけで対象が見つかることを確かめたら、料金の条件を加えます。Meta Query欄の下にある「+ カスタムフィールド条件を追加」を押してください。最初のkeyが空のままでは、次の条件を追加できません。

青いフォーカス枠が付いた追加ボタンを操作します。押す前はrelationが表示されていません。
2条件になると、欄の上側に「条件のつなぎ方 / relation」が現れます。追加した「条件2」は下側です。今回は東京であり、かつ料金の条件も満たす一覧なのでANDを選びます。
| relation | 取得する条件 | 今回の例 |
|---|---|---|
| AND | 両方を満たす | 東京、かつ料金6万円以上 |
| OR | どちらかを満たす | 東京、または料金6万円以上 |
ANDで0件になったからといって、ORへ変えて解決したことにはなりません。「両方を満たす」から「どちらかを満たす」へ、欲しい一覧の意味が変わるためです。必要な条件を先に決めましょう。
条件2へpriceを追加し、料金をNUMERICで比較する
条件1はそのまま残し、条件2へprice / 60000 / >= / NUMERICを入力します。6万円ちょうどを含め、それ以上の数値を対象にする指定です。保存値が60,000円のような文字列ではなく、数値として比較できる60000になっていることが前提です。
次の画面では、上側のrelationがAND、下側の条件2がpriceになっています。追加ボタンとrelationの場所を混同しないよう、1つ前の画面と見比べてください。

上の青枠はrelation、下の条件2は料金です。compareだけでなくtypeもNUMERICになっているか確認します。
2条件から実際に生成されたコードは次のとおりです。1条件目を消すのではなく、meta_queryの中へ2条件目とrelationが加わっています。
引数や処理の一部分だけを示した例です。このまま単独で貼らず、テンプレート内のWP_Queryとループへ組み込んでください。
$args = array( 'post_type' => 'works', 'post_status' => 'publish', 'posts_per_page' => 10, 'order' => 'DESC', 'orderby' => 'date', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'area', 'compare' => '=', 'type' => 'CHAR', 'value' => 'tokyo' ), array( 'key' => 'price', 'compare' => '>=', 'type' => 'NUMERIC', 'value' => 60000 ) ), 'no_found_rows' => true, 'ignore_sticky_posts' => true, 'update_post_meta_cache' => false, 'update_post_term_cache' => false, 'lazy_load_term_meta' => false);料金だけを比べると、検証用データの60000・80000・120000はすべて6万円以上です。一方、同じ比較をCHARにすると、文字列の並びとして判断され、120000が外れます。料金の大小を比べるときは、数字に見える値を入れるだけでなく、typeもNUMERICにします。
なお、料金で絞っても、料金順に並び替わるわけではありません。 ここでは投稿の日付降順のまま取得しています。料金順にしたい場合は、次の記事でorderby=meta_value_numの設定も確認できます。
料金順にしたいときorderby=meta_value_numが効かない時の確認ポイント数値で条件に合う投稿を絞る設定と、取得した投稿を価格順に並べる設定の違いを確認できます。
記事を読む開催地と料金の2条件を確認できたら、自分のフィールドでもWP Query Builderで入力と出力を見比べてみましょう。日付を加える前に、ここまでの条件を確かめておくと切り分けやすくなります。
保存値に合うメタ条件を作る
key・value・compare・typeとAND・ORを指定して$argsを生成できます。投稿の登録や実際の取得結果の確認は、自分のWordPress環境で行います。
条件3へACFの開催日を追加し、9月1日以降に絞る
最後に追加ボタンをもう一度押し、条件3へevent_date / 20260901 / >= / NUMERICを入力します。relationはANDのままです。これで地域・料金・開催日のすべてを満たす一覧になります。
ACF Date Pickerは、表示形式や返り値の形式とは別に、データベースへYmd形式で保存します。2026年9月1日は20260901です。この例は「2026年9月1日以降」という固定条件です。日付が変わっても「今日以降」へ自動で更新される条件ではありません。

9月1日当日を含む条件です。表示上の日付や区切り文字ではなく、Ymd形式の値を使います。
3条件から生成された配列を、そのまま載せています。先ほどの2条件にevent_dateが加わったことを確認してください。
引数や処理の一部分だけを示した例です。このまま単独で貼らず、テンプレート内のWP_Queryとループへ組み込んでください。
$args = array( 'post_type' => 'works', 'post_status' => 'publish', 'posts_per_page' => 10, 'order' => 'DESC', 'orderby' => 'date', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'area', 'compare' => '=', 'type' => 'CHAR', 'value' => 'tokyo' ), array( 'key' => 'price', 'compare' => '>=', 'type' => 'NUMERIC', 'value' => 60000 ), array( 'key' => 'event_date', 'compare' => '>=', 'type' => 'NUMERIC', 'value' => 20260901 ) ), 'no_found_rows' => true, 'ignore_sticky_posts' => true, 'update_post_meta_cache' => false, 'update_post_term_cache' => false, 'lazy_load_term_meta' => false);日付という理由だけでtypeをDATEにするのではなく、保存形式を確認します。今回のACFの8桁値はNUMERICで比較しています。YYYY-MM-DD形式で保存する別の設計とは分けて考えましょう。
日付の取得や表示形式で迷ったときは、次の記事が役立ちます。
ACFの日付を詳しくACFの日付で投稿を絞り込む方法|WP_Queryのmeta_query表示形式と保存形式を区別し、開催日の条件と表示を組み立てる手順を確認できます。
記事を読む同じ3件のデータで、1条件から3条件までの結果を比べる
ここまでの条件を、分離したWordPressの検証環境で実行します。使うのはID16「終了した相談会」、ID17「夏の制作相談会」、ID18「秋のWP_Query勉強会」の3件です。料金や日付は説明用データで、実際のイベントの募集情報ではありません。
| 投稿ID | area | price | event_date |
|---|---|---|---|
| 16 | osaka | 60000 | 20260712 |
| 17 | tokyo | 120000 | 20260812 |
| 18 | tokyo | 80000 | 20260905 |
生成コードは新しい順で取得するため、東京の2件は18→17の順になります。条件を増やしたときの結果は次のとおりです。
| 条件 | 取得した投稿ID | 件数 |
|---|---|---|
| area=tokyo | 18・17 | 2件 |
| area=tokyo AND price>=60000 | 18・17 | 2件 |
| area=tokyo OR price>=60000 | 18・17・16 | 3件 |
| 地域・料金・9月1日以降をAND | 18 | 1件 |
同じ条件の実際の一覧を見てみましょう。最初は東京、かつ6万円以上の2件です。料金を加えても2件のままなのは、東京の2件がどちらも6万円以上だからです。

東京かつ60,000円以上では、投稿18・17の2件です。地域だけの条件も、このデータでは同じ2件になります。
ORに変えると、料金条件を満たす大阪の「終了した相談会」も加わります。開催地が東京ではなくても、片方の条件を満たせば対象です。

ORへ変えると、東京ではない投稿16も料金条件を満たすため加わり、投稿18・17・16の3件になります。
ANDに戻し、さらに9月1日以降の開催日を加えると、「秋のWP_Query勉強会」の1件に絞られます。

東京・60,000円以上・2026年9月1日以降のすべてを満たすのは投稿18だけです。3画面とも実際のWP_Queryの取得結果です。
3条件の配列をテンプレートへ置き、イベント一覧を表示する
生成された配列に、WP_Queryで取得する処理と表示ループを追加します。次はクラシックテーマ向けの完成例です。ブロックエディターの本文へPHPを貼り付ける方法ではありません。
子テーマのtemplate-parts/event-meta-list.phpへ次のコードを置き、page.phpのメインループが終わった位置からget_template_part( ‘template-parts/event-meta-list’ );を1回呼び出します。既存の本文や一覧を二重に出さない位置を選び、本番とは分けた検証環境で試してください。
新規のPHPファイルなら、次の開始タグ付きコードをそのまま保存します。既存のPHP内へ追加するときは先頭の<?phpを除き、呼び出す側の1行もPHPの内側へ記述してください。
クラシックテーマのテンプレート(またはテンプレートパーツ)で、一覧を表示したい位置に置く例です。投稿本文やfunctions.phpへ、そのまま貼るコードではありません。
<?php$args = array( 'post_type' => 'works', 'post_status' => 'publish', 'posts_per_page' => 10, 'order' => 'DESC', 'orderby' => 'date', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'area', 'compare' => '=', 'type' => 'CHAR', 'value' => 'tokyo' ), array( 'key' => 'price', 'compare' => '>=', 'type' => 'NUMERIC', 'value' => 60000 ), array( 'key' => 'event_date', 'compare' => '>=', 'type' => 'NUMERIC', 'value' => 20260901 ) ), 'no_found_rows' => true, 'ignore_sticky_posts' => true, 'update_post_meta_cache' => false, 'update_post_term_cache' => false, 'lazy_load_term_meta' => false); $event_query = new WP_Query( $args ); if ( $event_query->have_posts() ) : while ( $event_query->have_posts() ) : $event_query->the_post(); ?> <article> <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2> </article> <?php endwhile;else : echo '<p>条件に合うイベントはありません。</p>';endif; wp_reset_postdata();$argsは直前の未編集生成結果と同じです。その後ろの取得処理・表示ループ・0件時の文言・リセットは、この記事で追加した実装です。検証データでは「秋のWP_Query勉強会」のリンクが1件表示されます。
自分のサイトで使うときは、登録済みの投稿タイプ・フィールド名・保存値へ置き換えます。設置位置やループの役割から確認したい場合は、次の記事をご覧ください。
PHPの設置とループを確認WP_Queryの基本構文と$argsの書き方生成した条件だけでなく、取得・表示・リセットを含む全体の流れを確認できます。
記事を読む0件になったら、保存値と条件を1つずつ照合する
コードが生成できても、データと条件が合わなければ0件です。まず対象の投稿が公開されているかを確認し、次の順で絞り込みを見直します。
取得結果が合わないときの確認順
- 1meta_queryを外し、対象のpost_typeから投稿を取得できるか確かめる
- 2取得したい投稿1件のフィールド名と保存値を確認する
- 3まず地域の1条件だけを実行する
- 4料金を加え、NUMERICと境界値を確認する
- 5開催日を加え、Ymdの形式とrelationを確認する
複数選択フィールドの配列や、単位・カンマ付きの料金は、今回の単純な保存形式とは違います。表示値だけを見て同じ条件を当てはめず、保存のされ方を調べてください。
ACFの表示値と保存値が違うときACFの値が検索できない時の確認ポイント選択肢や配列の保存形式を調べ、画面上の値をそのまま検索していないか切り分けます。
記事を読む入力・生成コード・取得結果をそろえてから実装へ進む
1条件ずつ確かめると、どの条件で結果が変わったか分かります。最後に、次の項目を見直しましょう。
実装後の確認
- keyは画面ラベルではなくフィールド名になっている
- valueは実際の保存値と同じ形式になっている
- 文字列・数値・日付に合うtypeを選んでいる
- 条件を増やしたときにANDとORの意味が意図どおりになっている
- 境界値・0件時の表示とループ後のリセットを確認した
画面全体の操作やコピー方法は、WP Query Builderの使い方チュートリアルをご覧ください。この記事の値を使う場合も、個人情報や秘密の値は入力せず、公開してよい検証用データで試しましょう。
一次資料
公式資料
keyへ「地域」と入力しますか?
画面の表示ラベルではなくフィールド名を入力します。この記事の設定ではareaです。実サイトでは自分のフィールド名を確認してください。
valueへ「東京」と入力しますか?
この記事のACF設定では保存値はtokyoなので、tokyoを入力します。表示ラベルと保存値が同じかどうかは、フィールドの設定によって異なります。
typeは空欄でもよいですか?
WordPressの初期値はCHARです。ただし料金の数値比較ではNUMERICなど、保存形式に合う型を明示して確認しましょう。
ACF Date PickerはDATEですか?
日付という名前だけでは決めません。この記事のYmd保存値は20260901のような8桁のNUMERICとして比較しています。YYYY-MM-DD形式で保存する別の設計とは分けて考えます。
relationが出てきません。
条件が1つだけなら表示されません。最初のkeyを入力してから追加ボタンを押し、2条件になった状態で上側の「条件のつなぎ方」を確認してください。
ANDで0件ならORへ変えればよいですか?
取得する一覧の意味が変わるので、0件を避けるためだけに切り替えません。各条件を単独で確かめ、必要な条件と保存値が合っているか確認してください。
生成コードだけで一覧が表示されますか?
生成の中心は$argsです。この記事の完成例では、それにWP_Queryの実行・表示ループ・0件時の文言・wp_reset_postdata()を追加しています。
この記事の検証情報
検証環境
- WordPress
- 7.1.4
- PHP
- 8.3.36
- テーマ
- wpq-media + DDEV
- 対象
- カスタム投稿 / taxonomy / meta_query
更新履歴
- 2026年10月31日 初回公開
この記事を活用する
あとで見返す・共有する
お気に入りに保存できます。役に立ったポイントは、いいねや共有で教えてください。


