本文へ移動

実装例

ACFの日付で投稿を絞り込む方法
|WP_Queryのmeta_query

「ACFで入力した開催日から、今日以降のイベントだけを出したい」「期間を指定して一覧にしたい」場合は、まずACFのフィールド名と投稿編集画面の入力値を確認します。そのうえで、Date Pickerの保存値Ymdに合わせてWP_Queryのmeta_queryを組みます。

Huddly Huddly 投稿日: 2026年9月9日 読了目安: 3分

最初にフィールド名と保存値を確認する

最初にACFのフィールド設定でフィールド名を確認し、投稿編集画面で日付が入力されているかを見ます。Date Pickerは画面の表示形式や戻り値の形式とは別に、データベースへ Ymd 形式で保存されます。

今日以降を出す場合は、比較値も Ymd にそろえ、meta_querycompare>=typeNUMERIC にします。近い日付順に並べる場合は、meta_keyorderby => ‘meta_value_num’order => ‘ASC’を組み合わせます。

今日以降のイベントを近い順に表示する

Date Pickerで入力したイベント日を使い、今日以降だけを近い順に表示します。例では投稿タイプをevent、フィールド名をevent_dateとします。

コードはイベント一覧を出したいテンプレートへ置き、eventevent_dateを自分の投稿タイプ名とフィールド名へ置き換えます。例は今日以降を昇順で取得しますが、必要に応じて期間や並びの向きを変えてください。

ACF Date Pickerのフィールド名、表示形式、戻り値の形式
ACF Date Pickerフィールド名と3つの日付形式を確認

コードのevent_dateはフィールド名です。画面表示、戻り値、データベース保存値は同じとは限りません。

最初に確認するのは保存形式

日付も投稿メタとして扱うため、先にmeta_queryの基本を押さえておくと、このあとのkeyvaluecomparetypeの役割を追いやすくなります。値が合っているのに0件になる場合は、meta_queryの確認手順へ進んでください。

Date Pickerの表示形式は入力画面、戻り値の形式はACF関数で取得した時の形です。データベースにはYmd、つまりYYYYMMDDで保存されます。管理画面に2026/06/14と見えていても、WP_Queryでは20260614と比較します。

この記事のYmd例はDate Picker向けです。時刻も保存するDate Time Pickerにはそのまま流用せず、フィールドタイプと保存値を確認してください。

今日以降のイベントだけを取得する最小例

WordPressのタイムゾーンに合わせた今日の日付をcurrent_time( ‘Ymd’ )で作り、meta_queryの比較値にします。まずは10件だけ返す最小条件で確認してください。

クラシックテーマのテンプレート(またはテンプレートパーツ)で、一覧を表示したい位置に置く例です。投稿本文やfunctions.phpへ、そのまま貼るコードではありません。

PHPevent-list.phpACFの日付フィールドで今日以降のイベントを取得する最小例
$today = current_time( 'Ymd' ); $args = [   'post_type'      => 'event',   'post_status'    => 'publish',   'posts_per_page' => 10,   'meta_key'       => 'event_date',   'orderby'        => [      'meta_value_num' => 'ASC',      'ID'             => 'ASC',   ],   'meta_query'     => [      [         'key'     => 'event_date',         'value'   => $today,         'compare' => '>=',         'type'    => 'NUMERIC',      ],   ],]; $event_query = new WP_Query( $args ); if ( $event_query->have_posts() ) {   echo '<ul>';    while ( $event_query->have_posts() ) {      $event_query->the_post();       printf(         '<li><a href="%1$s">%2$s</a></li>',         esc_url( get_permalink() ),         esc_html( get_the_title() )      );   }    echo '</ul>';} else {   echo '<p>今日以降のイベントはありません。</p>';} wp_reset_postdata();

meta_queryは取得条件、meta_keyorderbyは並び順です。YmdNUMERICで比較し、同じ日付ではIDの小さい順にして結果を再現しやすくしています。表示はタイトルとリンクだけにして、条件が合ってから日付や抜粋を足します。

今日以降のイベントだけを開催日の近い順に表示した一覧
実行結果今日以降のイベントを近い順に表示

検証日より前のイベントを除外し、event_dateの昇順で並べた結果です。

期間で絞り込む場合はBETWEENを使う

期間で絞る場合はcompare => ‘BETWEEN’を使い、開始日と終了日をYmdの配列で渡します。

指定期間内のイベントだけを取得するコード

次のコードは、2026年6月1日から2026年6月30日までのイベントだけを取得する例です。固定の日付で説明していますが、実務ではフォーム入力や現在月から開始日・終了日を作ることもあります。

クラシックテーマのテンプレート(またはテンプレートパーツ)で、一覧を表示したい位置に置く例です。投稿本文やfunctions.phpへ、そのまま貼るコードではありません。

PHPevent-list-between.phpACFの日付フィールドで指定期間内のイベントを取得する例
$start_date = '20260601';$end_date   = '20260630'; $args = [   'post_type'      => 'event',   'post_status'    => 'publish',   'posts_per_page' => 10,   'meta_key'       => 'event_date',   'orderby'        => 'meta_value_num',   'order'          => 'ASC',   'meta_query'     => [      [         'key'     => 'event_date',         'value'   => [ $start_date, $end_date ],         'compare' => 'BETWEEN',         'type'    => 'NUMERIC',      ],   ],]; $event_query = new WP_Query( $args );

BETWEENは開始日と終了日の両方を含みます。境界日を含めない要件なら、><の2条件に分けます。

WP_Meta_Queryの公式リファレンスでは、typeDATE を使う場合、BETWEENYYYY-MM-DD 形式で保存・比較されている場合に機能する旨が説明されています。ACF Date Pickerの保存値は基本的に Ymd なので、この記事の例では DATE ではなく、Ymd に合わせた NUMERIC 比較として整理しています。

コードはどこに置くか

一覧の表示コードは固定ページや一覧のテンプレートへ置きます。functions.phpへHTML出力まで直接書かず、関数やフックと表示を分けます。

実装前に確認する順番

  1. 1
    ACFの日付フィールド名を確認する
  2. 2
    Date Pickerの保存形式を確認する
  3. 3
    テンプレート内で最小コードを動かす
  4. 4
    タイトルだけ表示して取得条件を確認する
  5. 5
    日付表示やリンクなどの見た目を後から足す

実務では、まず posts_per_page を少なめにして確認するのがおすすめです。いきなり全件取得したり、複数の meta_query を組み合わせたりすると、問題が起きた時に原因を見つけにくくなります。

イベント投稿の編集画面で開催日を入力している状態
イベント投稿絞り込み対象の日付を入力

この例では、開催日へ入力した値をevent_dateとして保存し、WP_Queryの条件に使います。

うまく絞り込めない時に見るポイント

多い原因は、フィールド名、日付形式、投稿タイプの違いと、絞り込み・並び順の混同です。戻り値をY-m-dにしても、Date Pickerのデータベース保存値はYmdです。

症状最初に疑うこと確認方法
1件も表示されないフィールド名か日付形式が違うACFのフィールド名と比較値の形式を確認する
過去イベントも出るcompareやvalueが合っていない今日の日付がYmdで作られているか確認する
並び順が日付順にならないorderbyの指定が不足しているmeta_keyとmeta_value_numを確認する
想定外の投稿が混ざるpost_typeが広すぎるeventなど対象の投稿タイプに絞る

もうひとつ注意したいのは、日付フィールドが未入力の投稿です。未入力の投稿を含めたいのか、除外したいのかで条件は変わります。この記事の最小例では、event_date が今日以降の投稿だけを対象にしているため、日付が入っていない投稿は基本的に一覧には出さない前提です。

空文字やYmd以外の値が混在すると、数値比較の結果を信頼できません。対象投稿を1件に絞り、get_post_meta( $post_id, ‘event_date’, true )で保存値を確認してください。

公式資料で確認したいポイント

meta_querycomparetypeはWordPress側、Date Pickerの表示・戻り値・保存形式はACF側の公式資料で確認します。

公式リンク

公式ドキュメント

最後に判断したいこと

  • ACFの保存形式と比較値を同じ基準に揃えた
  • 単日・今日以降・期間指定のどれを実装するか決めた
  • 日付順に並べる場合のmeta_keyとorderbyを確認した
  • 境界日を含むかをテストデータで確認した
  • ループ後の表示が崩れないことを確認した
WP Query BuilderBuilderで条件を組み直す条件を選び、WP_Queryのコードを画面で作れます。Builderでクエリを作る

この記事を書いた人

Huddly

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

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

この記事の検証情報

検証環境

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

更新履歴

  • 2026年9月9日 初回公開

この記事を活用する

あとで見返す・共有する

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

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