本文へ移動

実装例

WordPressでイベント一覧を作る方法
|WP_QueryとACFの日付で開催予定を表示

イベント一覧では「今日以降だけを残す条件」と「開催日が近い順に並べる条件」の両方が必要です。ACF Date Pickerの保存値を確認し、WP Query Builderの生成コードを表示ループへつなぎます。

Huddly Huddly 投稿日: 2026年10月1日 読了目安: 4分

イベント一覧は、今日以降へ絞って開催日順に並べます

ACF Date Pickerの開催日をYmdで保存している場合は、meta_queryの>=とNUMERICで今日以降へ絞ります。meta_keyをevent_date、orderbyをmeta_value_num、orderをASCにすると、開催日が近い順に並びます。

WP Query Builderでは固定日付で取得結果を確認し、実装時にcurrent_time( ‘Ymd’ )へ置き換えます。過去の開催日を一覧から外すときに使える構成です。開催日が未入力の投稿を含めるかも先に決めましょう。

最初に投稿タイプと開催日の保存形式を決める

この記事ではカスタム投稿タイプworksに、ACF Date Pickerのフィールドevent_dateを用意した例を使います。対象サイトではeventなど、実際に登録している投稿タイプへ置き換えてください。

確認項目この記事の例確認する場所
投稿タイプworks投稿タイプ登録コードまたは管理画面URL
フィールド名event_dateACFのフィールド名
保存形式Ymdの8桁get_post_metaで実際の保存値を確認
当日の扱い含めるcompareに>=を使う
未入力一覧に含めない運用ルールと0件表示を決める

ACF Date Pickerは表示形式や戻り値形式を変更できますが、データベース上はYmd形式で保存されます。画面に「2026年9月14日」と表示されていても、比較する値は20260914です。

保存形式とmeta_queryの関係を先に詳しく確認したい場合は、次の記事で管理画面の値と取得結果を照らし合わせてから、この完成例へ戻ってください。

ACF日付の保存値を確認するACFの日付フィールドをWP_Queryで絞り込む方法記事を読む

WP Query Builderで今日以降と開催日順を入力する

公開中のWP Query Builderで「詳細設定(全項目)」を選び、基本設定、並び順、Meta Queryを入力します。動的な「今日」は毎日変わるため、最初は確認時点の日付である2026年9月14日を、20260914という固定値で入力します。

入力欄値意味
投稿タイプcustom / worksカスタム投稿worksを対象にする
公開状態publish公開済みだけにする
取得件数6最大6件を返す
並び方向 / orderASC小さい開催日から並べる
並べ替えの基準 / orderbymeta_value_numevent_dateを数値順に扱う
キー / keyevent_date開催日の保存フィールド
値 / value202609142026年9月14日を基準日にする
比較方法 / compare>=基準日を含めて未来を残す
値の型 / typeNUMERICYmdを数値として比較する

自動高速化はOFFにし、この記事で選んだ条件だけがコードへ出る状態にしました。orderbyへmeta_value_numを選ぶと、WP Query Builderは最初のMeta Queryのキーをmeta_keyにも反映します。

WP Query BuilderのMeta Queryへevent_date、20260914、以上、NUMERICを入力し、右側に開催日昇順のコードが生成された画面
公開中のWP Query Builder絞り込みと並び順を同時に設定

2026年9月14日を表す20260914で期待する投稿を確認してから、テンプレート側で今日の日付へ置き換えます。

次は、WP Query Builderがこの画面で生成したコードです。入力値、配列の順序、書式を変更せずに掲載しています。

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

PHPgenerated-upcoming-event-args.php2026年9月14日以降のworksを開催日昇順で取得する条件
$args = array(    'post_type' => 'works',    'post_status' => 'publish',    'posts_per_page' => 6,    'order' => 'ASC',    'orderby' => 'meta_value_num',    'meta_query' => array(        array(            'key' => 'event_date',            'compare' => '>=',            'type' => 'NUMERIC',            'value' => 20260914        )    ),    'meta_key' => 'event_date');
この固定値は取得結果の確認用です。そのまま使うと日付が進んでも基準が変わらないため、実装時は次の完成例のようにWordPress設定の現在日付へ置き換えます。

子テーマへイベント一覧を置き、固定ページから呼び出す

クラシックテーマの子テーマにtemplate-parts/upcoming-events.phpを作ります。WP Query Builderが生成したコードのうち、valueだけを$todayへ置き換え、表示ループを加えます。

PHPtemplate-parts/upcoming-events.php今日以降のイベントを開催日が近い順に一覧表示する
<?php$today = (int) current_time( 'Ymd' ); $args = array(    'post_type' => 'works',    'post_status' => 'publish',    'posts_per_page' => 6,    'order' => 'ASC',    'orderby' => 'meta_value_num',    'meta_query' => array(        array(            'key' => 'event_date',            'compare' => '>=',            'type' => 'NUMERIC',            'value' => $today        )    ),    'meta_key' => 'event_date'); $event_query = new WP_Query( $args ); if ( $event_query->have_posts() ) :    ?>    <section aria-labelledby="upcoming-events-title">        <h2 id="upcoming-events-title">開催予定のイベント</h2>        <ul>            <?php while ( $event_query->have_posts() ) : ?>                <?php                $event_query->the_post();                $event_date = (string) get_post_meta( get_the_ID(), 'event_date', true );                $date = DateTimeImmutable::createFromFormat( '!Ymd', $event_date );                ?>                <li>                    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>                    <?php if ( $date instanceof DateTimeImmutable ) : ?>                        <time datetime="<?php echo esc_attr( $date->format( 'Y-m-d' ) ); ?>">                            <?php echo esc_html( $date->format( 'Y年n月j日' ) ); ?>                        </time>                    <?php endif; ?>                </li>            <?php endwhile; ?>        </ul>    </section>    <?phpelse :    echo '<p>現在、開催予定のイベントはありません。</p>';endif; wp_reset_postdata();

current_time( ‘Ymd’ )は、WordPressの「設定 → 一般」で選んだタイムゾーンを基準にします。PHPサーバーの既定タイムゾーンへ直接依存させないことで、日付の切り替わりをサイト設定と揃えます。

page-events.phpの本文後から1回呼び出す

イベント一覧を表示する固定ページ用にpage-events.phpを子テーマへ作り、メインループ内でthe_content()の後からテンプレートパーツを呼びます。

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

PHPpage-events.phpイベント固定ページの本文後へ開催予定一覧を表示する
<?phpwhile ( have_posts() ) :    the_post();    the_content();    get_template_part( 'template-parts/upcoming-events' );endwhile;?>

テーマのfunctions.phpへHTMLごと直書きすると、表示位置と取得処理が追いにくくなります。再利用する取得条件は関数やプラグインへまとめても構いませんが、表示マークアップはテンプレート側に残すと役割を分けやすくなります。

子テーマのどのファイルを編集するか判断できない場合は、先に次の記事でpage.php、テンプレートパーツ、functions.phpの役割を確認してください。設置場所を決めてから戻ると、取得処理を同じページで二重に実行するミスも避けやすくなります。

コードの設置場所を確認するWP_Queryはどこに書く?front-page.php・固定ページ・functions.phpの使い分け記事を読む

開催日が毎日変わる一覧は、本番へ置く前にローカルまたはステージングで日付境界を確認します。検証環境を用意する場合は、バックアップと利用できるPHPバージョンも公式情報で確かめてください。

当日・未来・前日・未入力の取得結果を確認する

分離したWordPress環境へ、当日、未来2件、前日、開催日未入力の5投稿を用意しました。サイトのタイムゾーンはAsia/Tokyo、基準日は20260914です。

WP Query Builderが生成した条件を変更せずに使うと、ID92、93、94の3件がevent_dateの昇順で返ります。投稿の公開日順ではなく、開催日が近い順です。

WordPress検証環境で当日開催のID92、9月20日のID93、10月3日のID94が開催日昇順に3件表示された画面
実際のWP_Query結果今日を含む開催予定が3件

event_dateが20260914以上の投稿を、meta_value_numの昇順で表示した結果です。

compareを>へ変えると当日のID92が外れ、ID93と94の2件になります。前日のID95と、event_dateを保存していないID96は、どちらの一覧にも入りません。

event_dateが基準日以上では3件、基準日より大きい条件では2件となり、前日ID95と未入力ID96が除外された比較画面
境界と未入力の確認結果当日を含めるかを比較

同じ5投稿でcompareだけを切り替えたときの、対象IDの違いです。

カテゴリーや地域も加える場合は条件を1つずつ足す

「今日以降で、東京開催だけ」のような一覧では、開催日のMeta QueryにTax Queryや別のMeta Queryを追加します。最初から複数条件を入れると0件の原因が分からないため、開催日だけで3件が返ることを確認してから地域条件を足します。

同じ種類の条件どうしをつなぐ場合と、異なる種類の条件を組み合わせる場合とでは、AND・ORの書き方が変わります。地域や公開対象を追加する前に、次の記事でrelationを置く場所と、異なる種類の条件をまたぐORの制約を確認してください。

複数条件へ広げるWP_Queryで複数条件を組み合わせる方法記事を読む

表示されないときは保存値・型・時刻を順に確認する

結果が合わないときは、条件を増やす前に保存値、並び順、日付境界の順で切り分けます。

症状最初に確認すること対処
未来のイベントが出ないevent_dateの保存値投稿IDを指定してget_post_metaで8桁か確認
順番が合わないmeta_keyとorderbyevent_dateとmeta_value_numを組み合わせる
当日が消えるcompareが>になっている当日を含めるなら>=
深夜に切り替わりがずれる現在日付の基準current_timeとWordPressタイムゾーンを使う
日付未入力も出したい要件が別NOT EXISTSを含むORと並び順を別途設計

同じ開催日が複数ある場合、このコードだけではその中の順番を固定しません。必要なら、まず開催日順を確認したあと、orderbyへIDなどの二次条件を手動で加えます。

イベント条件を詳細設定で組み立てる

カスタム投稿タイプ、Meta Query、meta_value_numの並び順を画面で確認できます。固定日付で取得結果を確認してから、表示用ファイルでWordPressの現在日付へ置き換えてください。

WP Query Builderのどの欄をどの順番で操作するかを詳しく確認したい場合は、詳細設定の記事でTax・Meta・Date Queryの入力手順を画面ごと追えます。この記事の完成例へ条件を足す前の操作ガイドとして読んでください。

詳細設定の操作を確認するWP Query Builderの詳細設定の使い方記事を読む

公開前は日付境界と0件表示まで確認する

毎日対象が変わるため、正常系だけでなく日付が切り替わる境界も小さなデータで確認します。

イベント一覧の確認順

  1. 1
    WordPressのタイムゾーンを確認する
  2. 2
    前日・当日・翌日・未来・未入力の投稿を用意する
  3. 3
    固定日付で期待する投稿IDと順番を確認する
  4. 4
    compareを>=と>で切り替えて当日の扱いを確認する
  5. 5
    current_timeの動的日付へ置き換える
  6. 6
    対象が0件のとき案内文が表示されるか確認する
  7. 7
    独自ループ後に元ページの本文へ戻るか確認する

イベント一覧の最終チェック

  • 投稿タイプとevent_dateを実際の名前へ合わせた
  • Ymdの保存値にNUMERIC比較を使った
  • 当日を含めるかcompareで明示した
  • meta_keyとmeta_value_numで開催日順にした
  • 現在日付をWordPressのタイムゾーンで作った
  • 日付未入力の扱いを決めた
  • 表示ファイルと呼び出し位置を記録した
  • 0件案内とwp_reset_postdataを入れた

イベント日付とWP_Queryの公式資料を確認する

保存形式はACF、絞り込みと並び順はWordPressの公式資料で確認します。戻り値形式だけを見て比較値を決めないようにしてください。

イベント一覧のよくある質問

実装時に迷いやすい当日、未入力、終了日の扱いを短く整理します。

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月1日 初回公開

この記事を活用する

あとで見返す・共有する

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

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