今回つくるのは、wordpressで記事投稿の際にイベントのスケジュール(開催期間)を登録して開催期間中の記事だったらトップに表示させる、それがなければ直近の未来の日付の記事を表示するという仕様だ。
まずはCustom field suiteの設定(送り手)
Custom field suiteのフィールドタイプの日付フォーマットを使う
開始日と終了日のフィールドを作る。
フィールド名はそれぞれcfs_date_start cfs_date_endにした。
ダッシュボードの投稿画面に反映させるとこんな感じ
記事を表示する側の設定(受け手)
データの取得は記事取得ループの中で
$cfs->get(‘cfs_date_start’)で出来る。
取得したデータは文字列で「2017-01-14」のようになる。
トップページに表示する条件として、開始日が今日と今日以前、かつ終了日が今日以降。
つまり現在開催中の記事。
それがない場合は、開始日の日付が直近の未来の記事。
それもない場合は表示なし。
日付をタイムスタンプに変換する
開始日と終了日をタイムスタンプに変換する。
$date_start_val=strtotime($date_start);
$date_end_val=strtotime($date_end);
「2017-01-14」というような文字列を変換するのでその日の午前0時のタイムスタンプが取れる。
今日の日付を取得
$today=date_i18n(“Y-m-d”);//ローカル(日本)の時間取得 「2017-01-14」というような文字列で取れる。
$today=date_i18n(‘U’);のようにいきなりタイムスタンプでも取れるが、今日の午前0時のタイムスタンプがほしいので一旦「2017-01-14」というような文字列で取っておいてタイムスタンプに変換する。
$today_val=strtotime($today);
それぞれの日付の午前0時のタイムスタンプが取れたので、後はそれを条件式に当てはめるだけ。
開催中の記事を抽出
if($today_val>=$date_start_val && $today_val<=$date_end_val){
トップページに表示
}else{
表示しない
}
開催中の記事がない場合は直近の未来の日付の記事を抽出
記事ループが二回必要。
一回目で未来の日付の記事の開始日を配列に格納していく。
開始日のタイムスタンプ=strtotime(開始日);
array_push(配列, 開始日のタイムスタンプ);
sort(配列, SORT_NUMERIC);//昇順にソートする。 結果、配列[0]が直近の未来の記事の開始日のタイムスタンプになる。
二回目のループで、配列[0]と同じ開始日のタイムスタンプの記事を抽出。
以上「簡単なスケジュールのシステムを作ってみた。」の記事でした。
Custom field suiteの使い方はまた別の記事で書きます。
コメント