[WordPress] カスタムフィールドテンプレートの「申込期限」で受付中・受付終了を自動切り替えする方法
WordPressでイベントやセミナーの案内ページを作成する際、
・申込期限までは申込フォームを表示する
・期限を過ぎたら「受付終了」へ切り替える
といった運用をしたいケースがあります。
このような場合は、カスタムフィールドに設定した日付を基準に表示内容を切り替えることで、更新作業を自動化できます。
この記事では、プラグイン「Custom Field Template(カスタムフィールドテンプレート)」で作成した「申込期限」フィールドを利用し、
・期限前 → 「受付中」
・期限後 → 「受付終了」
を自動で表示する方法を解説します。
カスタムフィールドテンプレートで申込期限を作成する
まずは、カスタムフィールドテンプレートで「申込期限」を作成します。
今回は、日付入力用のフィールドとして設定します。

設定例は以下のとおりです。
[申込期限]
type = textfield
size = 10
date = true
dateFormat = yyyy-mm-dd
startDate = '2026-04-01'
dateFirstDayOfWeek = 1
| 設定項目 | 内容 |
|---|---|
| date = true | 日付ピッカーを有効化 |
| dateFormat | 保存形式を yyyy-mm-dd に指定 |
| startDate | 選択できるカレンダーの開始日 |
| dateFirstDayOfWeek | 月曜日始まり |
申込期限で受付状況を切り替えるコード
次に、single-event.php などのテンプレートファイルでカスタムフィールドの日付を取得し、現在日と比較します。
申込期限内であれば「受付中」、期限を過ぎた場合は「受付終了」を表示します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<?php if ( have_posts() ) : ?> <?php while ( have_posts() ) : the_post(); ?> <?php the_content(); ?> <?php // 今日の日付を取得 $today_timestamp = strtotime( current_time('Y-m-d') ); // カスタムフィールドの値を取得 $deadline = get_post_meta(get_the_ID(), '申込期限', true); // UNIXタイムスタンプへ変換 $deadline_timestamp = $deadline ? strtotime($deadline) : null; ?> <?php if (!$deadline_timestamp || $today_timestamp <= $deadline_timestamp) : ?> <p class="status-open">受付中</p> <?php else : ?> <p class="status-close">受付終了</p> <?php endif; ?> <?php endwhile; ?> <?php endif; ?> |
コードの解説
今日の日付を取得
$today_timestamp = strtotime( current_time('Y-m-d') );
WordPressで設定されているタイムゾーン基準の日付を取得しています。
カスタムフィールドの値を取得
$deadline = get_post_meta(get_the_ID(), '申込期限', true);
「申込期限」に入力された日付を取得します。
UNIXタイムスタンプへ変換
$deadline_timestamp = $deadline ? strtotime($deadline) : null;
日付同士を比較しやすくするため、タイムスタンプへ変換しています。
なお、null は「値が存在しない状態」を表します。
ここでは、申込期限が未入力の場合に null を代入しています。
申込期限を過ぎたら受付終了を表示する仕組み
条件分岐の中心となるのは以下のコードです。
<?php if (!$deadline_timestamp || $today_timestamp <= $deadline_timestamp) : ?>
判定内容は次のとおりです。
| 状態 | 結果 |
|---|---|
| 今日 < 期限日 | 受付中 |
| 今日 = 期限日 | 受付中 |
| 今日 > 期限日 | 受付終了 |
| 申込期限が未入力 | 受付中 |
たとえば、
・申込期限:2026-06-16
・本日:2026-06-16
の場合も、受付中として扱われます。
期限日当日も受付したい場合
$today_timestamp <= $deadline_timestamp
期限日当日に受付終了へ切り替えたい場合
$today_timestamp < $deadline_timestamp
とします。
申込期限が未入力の場合の処理
上記コードでは、申込期限が未入力の場合も「受付中」が表示されます。
!$deadline_timestamp
もし、申込期限が未入力の場合は「受付終了」を表示したい場合は、以下のように変更します。
<?php if ($deadline_timestamp && $today_timestamp <= $deadline_timestamp) : ?>
まとめ
- カスタムフィールドテンプレートで申込期限を管理できる
get_post_meta()で日付を取得するstrtotime()でタイムスタンプへ変換して比較する- 期限日当日まで受付する場合は
<=を使用する - 未入力時も受付中にしたい場合は
!$deadline_timestampを追加する - イベントページやセミナー申込ページの運用自動化に便利
この仕組みを利用すれば、毎回テンプレートを書き換えることなく、カスタムフィールドの日付だけで「受付中」「受付終了」の表示を自動で切り替えできます。