簡単なスケジュールのシステムを作ってみた。

今回つくるのは、wordpressで記事投稿の際にイベントのスケジュール(開催期間)を登録して開催期間中の記事だったらトップに表示させる、それがなければ直近の未来の日付の記事を表示するという仕様だ。

まずはCustom field suiteの設定(送り手)

Custom field suiteのフィールドタイプの日付フォーマットを使う

開始日と終了日のフィールドを作る。

フィールド名はそれぞれcfs_date_start   cfs_date_endにした。

ダッシュボードの投稿画面に反映させるとこんな感じ

スクリーンショット 2017-01-17 16.27.21

記事を表示する側の設定(受け手)

データの取得は記事取得ループの中で

$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の使い方はまた別の記事で書きます。

コメント