期間限定でバナー画像を出すようなお仕事があったので作業メモ
やること
ACF(Advanced Custom Fields)のDate Time Pickerを使って、WordPressの管理画面から開始日時と終了日時を設定し、その期間だけコンテンツを表示するようなものを作ります。
ACFで新規フィールドを作成して以下のように設定
フィールドラベルを開始日時
フィールド名をstart_date_time
としました。
フィールドタイプはDate Time Picker
カレンダー状のUIから日付を選択し、時間も設定することができるようになります。
表示フォーマットは管理画面側のUIに表示される日時のフォーマットです。
初期設定(d/m/Y g:i a
)は少しわかりにくいため、ここではカスタム(Y年n月j日D H:i:s
)にしました。
同様に終了日時も
フィールドラベルを終了日時
フィールド名をend_date_time
で登録していきます。
ラッパーの属性:widthを50%にすることで、開始日時と終了日時の入力フォームを横並びにすることができます。
期間を設定する
作ったフィールドグループを設置したページの設定画面で日時をそれぞれ指定します。
フォームに入力された日時のフォーマットがACF側で設定したカスタムフォーマット(Y年n月j日D H:i:s
)になっているのが確認できます。
コンテンツの出力
出力するページのPHPファイルに下記のようにコードを書きます。
<?php
//現在の日時を取得
$current_date_time = esc_html(current_time('Y-m-d H:i:s'));
//ACFのデータを取得
$start_date_time = esc_html(get_field('start_date_time'));
$end_date_time = esc_html(get_field('end_date_time'));
//$start_date_timeと$end_date_timeが存在する場合、かつ現在の日時がその範囲内にある場合
if ($start_date_time && $end_date_time && $start_date_time <= $current_date_time && $end_date_time >= $current_date_time):
?>
<!-- 期間限定で出したいコンテンツ -->
<?php endif; ?>
※上記のコードではエラーの場合何も起きないので必要に応じてエラーハンドリングを入れてください。
ポイントはcurrent_time()
のフォーマットがACF側の返り値のフォーマット
と同じになるようにすること。
ここが違うとデータの比較ができず、正しく動作しません。
またcurrent_time()
関数はWordPressの設定に基づいて時刻を取得するため、うまくいかない場合はタイムゾーンの設定が正しく行われているかも要確認です。
実際は表示するコンテンツも管理画面から登録できるように作りました。
ちなみにトップページに表示したい場合はACFの有料版を使うか、設定用の非公開固定ページを作る、WordPressの設定で特定の固定ページをトップページ化して使うなどしてACFのフィールドグループを設置することができます。