phpを使って、「ある特定の時間をすぎたら、ページが表示された時に何らかの挙動を実行する方法」について、書いていきます
WordPressで、と言うよりは
PHPで、と言うことになるんですが、
今回はタイトルの通り「Webサイト上で、特定の時間になったら何らかの挙動を実行させる方法」
について書いていきたいと思います。
手順としては
(1) 現在の時間を取得する
(2) そこをすぎたら何らかの挙動を実行させるための「特定の時間」を定義しておく
(3) 上記の2者を比較する条件式を書く
大きく分けて、この3つで実装できます。
それでは早速次のセクションから、コードをご紹介します。
現在の時間を取得するコードと、時間を設定しておく記述
<?php $myTime = new DateTime('now', new DateTimeZone('Asia/Tokyo')); $myFormatted = $myTime->format('H:i:s'); $myMorning = date('H:i:s', strtotime('080000')); $myDaytime = date('H:i:s', strtotime('135900')); $myNighttime = date('H:i:s', strtotime('235959')); ?>
まず、2行目にあるように php の
DateTime()
というクラスを使用して、
現在の時間を取得します。 このDateTime() は、第一引数を省略(null) または ‘now’ とすると、現在の時間を返してくれます。
第二引数には、世界のどの標準時を基準とした値を返すかを定義しています。東京時間がほしいので、new DateTimeZone('Asia/Tokyo')
と指定しているわけです。
3行目では、取得した時間を「時間:分:秒」の形にフォーマット。 $myFormatted に格納しています。
4, 5, 6行目は、基準としたい任意の時間を指定。
$myFormatted と大小を比較して、特定の時間をすぎたら任意の命令を実行させる、という流れになります。
厳密に言うと、上記の一連の流れはまず2行目で「クラス」を使用して「インスタンス」を生成している、という概念になります。3行では、生成した $myTime インスタンスに format というメソッドを実行、時間:分:秒 のフォーマットで時間を取得している、という流れになります。
では、続いて、その
「大小を比較して、特定の時間をすぎたら任意の命令を実行させる」という部分について、書いていきます。
switch文、または単純にif~else文で比較する
さて、ここまでの記述で準備が整ったので、続いては
「特定の時間をすぎたら任意の命令を実行させる」部分についてです。
具体的には、こんな感じに書きます。
switch文の場合
<?php switch ($myFormatted) { case $myFormatted >= $myMorning && $myFormatted <= $myDaytime: echo('<p>朝は Vue.js を学びました。</p>'); break; case $myFormatted >= $myDaytime && $myFormatted <= $myNighttime: echo('<p>お昼はカフェで Mac 広げてました。</p>'); break; case $myFormatted >= $myNighttime && $myFormatted <= $myMorning: echo('<p>寝る前はTEDスピーチ観てプレゼンスキルをアップ。</p>'); break; default: break; } ?>
上記の解説です。
3, 7, 11行目で、先ほどの例で用意しておいた
$myMorning, $myDaytime, $myNighttime
という時間を、現在の時間 $myFormatted と比較、
条件を満たした時に対応するメッセージを出力する、
というサンプルになります。
この echo(…) となっている部分を、他の命令に置き換えれば
色々な用途に使えそうですね。
末尾の default: は、
どの条件にも当てはまらなかった場合の記述になります。
一見この default: の記述はいらないようにも見えますが、想定していないバグを防ぐ意味でも、例外の記述というのは、含めておいた方が何かと安全です。
switch文の公式解説ページは次のリンクです。
PHP:switch — Manual
単純にif~else文で書く場合
上はswitch文を使った例ですが、同じことをif~else文でも書けます。
if~else文で書くとこんな感じになります。
<?php if($myFormatted >= $myMorning && $myFormatted <= $myDaytime){ echo('<p>朝は Vue.js を学びました。</p>'); }elseif($myFormatted >= $myDaytime && $myFormatted <= $myNighttime){ echo('<p>お昼はカフェで Mac 広げてました。</p>'); }elseif($myFormatted >= $myNighttime && $myFormatted <= $myMorning){ echo('<p>寝る前はTEDスピーチ観てプレゼンスキルをアップ。</p>'); }else{ return; } ?>
↑この if~else文というのは、どんな言語でも比較的初期に出てくる基礎的な構文なので、見慣れた例だと思います。
今回のような単純な例だと、どちらを使って書いても良いんですが
switch
文に慣れると、
switch文の方がすっきりしている印象があります。
使い分けについては、ケースバイケースです。可読性の高さや分岐の多さで使い分けるイメージです。
この記事のまとめ
今回はphpで、現在の時間を取得して、特定の時間をすぎたら何らかの処理を実行する方法について書いてみました。
WordPressの場合は、
記述場所としては、
関数化して functions.php に書いて呼び出してもいいですし、
実行したいテンプレート内に直接記述しても動きます。
またこの例を通じて、phpにおける分岐処理の2種類の書き方についても触れてみました。
WordPressのカスタマイズを何度も行っていくと、結局はphpを(程度の大小はありますが)学んでいく事になりますので、
少しでも良いサンプルになれば、と思い記事にしてみました。
当サイトでは、今後もWordPressや、Webサイト制作に関する記事を更新していきます。