WordPressでmeta query等である日時より後、前などの投稿フィルターするときのタイムゾーン

こんにちはレターズです。
今回、Wp-queryでmeta queryを使ってカスタムフィールドに入力された日時より前の投稿を取得するという処理のときのタイムゾーンの設定についてです。

WordPress(php)でdate(‘Ymd’)などで日時を取得すると、取得される日時はデフォルトで設定されている、UTCのタイムゾーン(日本より9時間遅れています。)になります。
そうすると、この日より前というような処理をする時、一見うまく行っているように見えて実は朝の9時が切り替えの時間になってしまい、朝7時ごろなどは前の日の記事も表示されてしまいます。

そこで

下記のコードをfunctions.phpに記述してあげましょうと思ったのですが。。

//
//set date dafault to TOKYO (9hours ahead of UTC)
date_default_timezone_set('Asia/Tokyo');

date_default_timezone_set() を使ってタイムゾーンを変えてしまうとWordPress内部や他のプラグインに悪影響を与えるようで、、みた感じは無事に動いているように見えるんですけどね。。

。。。

と色々調べた結果

  • date の代わりに date_i18n を使う
  • time() の代わりにcurrent_time(‘timestamp’) を使う。
  • strtotime で現在時刻を軸にタイムスタンプを得るときは current_time(‘timestamp’) を引数に入れる
echo date_i18n("Y-m-d H:i:s");
$today_timestamp = current_time('timestamp');
echo date_i18n("Y-m-d", $today_timestamp);
echo date_i18n("H:i:s", $today_timestamp);
$yesterday_timestamp = strtotime("-1 day", current_time('timestamp'));
echo date_i18n("Y-m-d H:i:s", $yesterday_timestamp);

https://qiita.com/shotets/items/be6b4d2675ce20af280e

Qiita – wordpressの日付関数(date, date_i18n, current_time)の挙動メモ

上記サイトを参考にさせていただきました。

おまけ技

strtotimeで9時間足してしまうという手もありかもしれません。

$temp_date = date('Y-m-d H:i:s', strtotime('+9hour')); 

というわけで、こんな落とし穴もありつつなのが楽しいウェブ制作です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です