本文へ移動

ツール連携

WP Query Builderでカスタムフィールド条件を作る方法
|meta_query入門

「東京で開催するイベントだけを一覧にしたい」。そんなときに使うのが、カスタムフィールドの値で投稿を絞り込むmeta_queryです。まずは開催地の1条件から始め、料金と開催日を順に追加してみましょう。

Huddly Huddly 投稿日: 2026年10月31日 読了目安: 7分

フィールド名と保存値を調べ、条件を1つずつ追加しましょう

WP Query Builderでは、keyへフィールド名、valueへ保存値を入力します。地域の文字列ならCHAR、料金の数値比較ならNUMERICのように、保存形式に合わせてtypeを選びます。

まず開催地だけで絞り込み、次に料金と開催日を追加します。複数条件をすべて満たしたいときはANDです。生成後はWordPressの実データで取得結果を確かめましょう。

絞り込みたいイベントと、保存されている値を確認する

この記事では、イベント紹介を登録したカスタム投稿タイプworksを使います。最初は「東京で開催するもの」、最後は「東京・料金6万円以上・2026年9月1日以降の開催」という一覧を作ります。条件を増やしても、同じ3件のデータを使います。

worksや各フィールド名は検証サイトの例です。自分のサイトでは登録済みの名前に置き換えてください。通常の投稿を使う場合、投稿タイプはpostです。WP Query Builderで名前を入力しても、投稿タイプやフィールドが新しく登録されるわけではありません。

入力前に確認すること

  1. 1
    一覧に出したい投稿の種類と、絞り込みたい条件を決める
  2. 2
    対象の投稿を1件開き、地域・料金・開催日などの値を確認する
  3. 3
    ACFならフィールドグループでフィールド名を確認する
  4. 4
    表示名だけでなく、実際に保存される値と形式を調べる

ACFの表示ラベルとフィールド名は別です。「地域」と表示されていても、keyへ入れるのはareaというフィールド名です。 保存値も、画面の見た目どおりとは限りません。

この例で確認する名前と値は、次の組み合わせです。料金は単位やカンマを含めずに保存し、ACF Date Pickerの開催日は8桁のYmd形式で保存します。

表示や入力の例フィールド名保存値の例
地域:東京areatokyo
価格:80000price80000
開催日:2026年9月5日event_date20260905

ACFのフィールドグループで「地域」を開くと、ラベル・フィールド名・選択肢を確認できます。tokyo : 東京の左側が保存値、右側が表示ラベルです。設定を確認するだけなら、値の変更や保存は不要です。

ACFの地域フィールドにラベル地域、フィールド名area、選択肢tokyo : 東京とosaka : 大阪が設定されている画面
名前と保存値地域・area・tokyoは役割が違います

分離した検証環境の実画面です。実サイトでは自分のフィールド設定を確認してください。

フィールド名は分かっても、対象投稿に何が保存されているか分からない場合は、次の記事で実際の保存値を確かめる手順を確認できます。

保存値を調べるmeta_queryが効かない時のチェックリスト記事を読む

meta_queryの4項目で「地域が東京」という条件を作る

WP Query Builderで「詳細設定(全項目)」を選び、「Meta Query(カスタムフィールド)」を開きます。基本設定では投稿タイプをcustom、カスタム投稿タイプをworks、公開状態をpublish、表示件数を10にします。この記事では並び順もdate / DESCにそろえます。

最初の条件には、次の4項目を入力します。keyを入力すると、残りの欄が編集できるようになります。

入力欄入力値決めていること
keyarea地域のフィールドを調べる
valuetokyo東京の保存値と比較する
compare=指定した値と一致するものを探す
typeCHAR文字列として比較する

WordPressではcompareの初期値は=、typeはCHARです。ここでは画面でも明示して、どの条件になったか確認します。「キー自体の比較(任意)」は使いません。

areaがtokyoのイベントだけを取得する

入力後、keyがarea、valueがtokyoになっているか見直しましょう。「東京」という表示ラベルをvalueへ入れる例ではありません。

WP Query Builderの条件1へarea、tokyo、=、CHARを入力した画面
文字列の1条件保存値tokyoで東京のイベントを探す

地域の表示ラベルではなく保存値を入力します。この時点ではrelationの欄はありません。

公開中のWP Query Builderで、この入力から生成された未編集のコードです。この配列だけでは画面に一覧は表示されず、後半の完成例でWP_Queryへ渡します。

引数や処理の一部分だけを示した例です。このまま単独で貼らず、テンプレート内のWP_Queryとループへ組み込んでください。

PHPgenerated-area-args.php地域の保存値がtokyoのイベントを取得する条件
$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が空のままでは、次の条件を追加できません。

入力済みの条件1の下でカスタムフィールド条件を追加ボタンへフォーカスした画面
追加する場所条件1の下のボタンから2条件目を追加

青いフォーカス枠が付いた追加ボタンを操作します。押す前は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 ANDでarea tokyoとprice 60000以上 NUMERICの2条件を組み合わせた画面
数値を追加ANDで開催地と料金の両方を条件にする

上の青枠はrelation、下の条件2は料金です。compareだけでなくtypeもNUMERICになっているか確認します。

2条件から実際に生成されたコードは次のとおりです。1条件目を消すのではなく、meta_queryの中へ2条件目とrelationが加わっています。

引数や処理の一部分だけを示した例です。このまま単独で貼らず、テンプレート内のWP_Queryとループへ組み込んでください。

PHPgenerated-area-price-args.php東京かつ料金6万円以上のイベントを取得する条件
$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日以降」という固定条件です。日付が変わっても「今日以降」へ自動で更新される条件ではありません。

条件3へevent_date、20260901、>=、NUMERICを入力した画面
日付を追加開催日の保存形式に合わせて8桁で比較

9月1日当日を含む条件です。表示上の日付や区切り文字ではなく、Ymd形式の値を使います。

3条件から生成された配列を、そのまま載せています。先ほどの2条件にevent_dateが加わったことを確認してください。

引数や処理の一部分だけを示した例です。このまま単独で貼らず、テンプレート内のWP_Queryとループへ組み込んでください。

PHPgenerated-event-filter-args.php東京・料金6万円以上・2026年9月1日以降をANDで絞り込む条件
$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件です。料金や日付は説明用データで、実際のイベントの募集情報ではありません。

投稿IDareapriceevent_date
16osaka6000020260712
17tokyo12000020260812
18tokyo8000020260905

生成コードは新しい順で取得するため、東京の2件は18→17の順になります。条件を増やしたときの結果は次のとおりです。

条件取得した投稿ID件数
area=tokyo18・172件
area=tokyo AND price>=6000018・172件
area=tokyo OR price>=6000018・17・163件
地域・料金・9月1日以降をAND181件

同じ条件の実際の一覧を見てみましょう。最初は東京、かつ6万円以上の2件です。料金を加えても2件のままなのは、東京の2件がどちらも6万円以上だからです。

共通サンプルサイトで地域が東京かつ料金60000円以上のイベント18・17が表示された一覧
2条件のAND地域と料金の両方を満たす2件

東京かつ60,000円以上では、投稿18・17の2件です。地域だけの条件も、このデータでは同じ2件になります。

ORに変えると、料金条件を満たす大阪の「終了した相談会」も加わります。開催地が東京ではなくても、片方の条件を満たせば対象です。

同じサンプルサイトで地域が東京または料金60000円以上のイベント18・17・16が表示された一覧
2条件のORどちらかを満たす投稿16も加わる

ORへ変えると、東京ではない投稿16も料金条件を満たすため加わり、投稿18・17・16の3件になります。

ANDに戻し、さらに9月1日以降の開催日を加えると、「秋のWP_Query勉強会」の1件に絞られます。

同じサンプルサイトで地域・料金・開催日の3条件をすべて満たすイベント18だけが表示された一覧
3条件のAND開催日も満たす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へ、そのまま貼るコードではありません。

PHPtemplate-parts/event-meta-list.php生成した3条件の配列を使ってイベントのタイトルとリンクを表示する
<?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件です。まず対象の投稿が公開されているかを確認し、次の順で絞り込みを見直します。

取得結果が合わないときの確認順

  1. 1
    meta_queryを外し、対象のpost_typeから投稿を取得できるか確かめる
  2. 2
    取得したい投稿1件のフィールド名と保存値を確認する
  3. 3
    まず地域の1条件だけを実行する
  4. 4
    料金を加え、NUMERICと境界値を確認する
  5. 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()を追加しています。

WP Query BuilderBuilderで条件を組み直す条件を選び、WP_Queryのコードを画面で作れます。Builderでクエリを作る

この記事を書いた人

Huddly

Web制作 / フロントエンドエンジニア

WordPressとフロントエンド実装で迷いやすい点を、公式情報と検証結果を分けながら、初学者にも追いやすい順序で整理しています。

この記事の検証情報

検証環境

WordPress
7.1.4
PHP
8.3.36
テーマ
wpq-media + DDEV
対象
カスタム投稿 / taxonomy / meta_query

更新履歴

  • 2026年10月31日 初回公開

この記事を活用する

あとで見返す・共有する

お気に入りに保存できます。役に立ったポイントは、いいねや共有で教えてください。

任意のご支援 役に立ったときだけ、活動を応援できます OFUSEはサイト・記事制作に使います。支援の有無で、読める内容や使える機能は変わりません。