WordPressを2.9にしてから、投稿などのタイプスタンプは正しいのに、内部で動かしているスクリプトの時間だけが9時間ズレるという現象が起こった。例えば、日付が変わったら表示を変えるスクリプトを書いても、午前9時にならないと変わらない。アクセスカウンタもリセットされない。最初はサーバ側のタイムゾーン設定を疑ったが、確認してもおかしくないし、WordPress上のスクリプトだけが狂う。
調べてみると、スクリプトの日付/時刻関数で使用されるデフォルトタイムゾーンが、UTC(協定世界時)になったため。最新の3.0.1でもそのままなので、対応が必要だ。方法は次の4つ。
- WordPressのルートにあるwp-settings.phpで、下記部分をコメントアウトする。
3.0.1の場合(2.9.xの場合は21~22行目)
// Set default timezone in PHP 5. // if ( function_exists( 'date_default_timezone_set' ) ) // date_default_timezone_set( 'UTC' );
- コメントアウトせず、UTCに9を足す。
// Set default timezone in PHP 5. if ( function_exists( 'date_default_timezone_set' ) ) date_default_timezone_set( 'UTC+9' );
- UTCをJTC(日本標準時)にしてしまう。
// Set default timezone in PHP 5. if ( function_exists( 'date_default_timezone_set' ) ) date_default_timezone_set( 'JTC' );
- functions.php(テーマのための関数)に下記を追加する。
WordPressコアは問題ないが、テーマの中で動いているスクリプトの関数がズレるわけだから、各テーマのfunctions.phpで対応すればいいという考え方。
date_default_timezone_set( 'Asia/Tokyo' );
1~3はWordPressをバージョンアップするたびに修正が必要。4はバージョンアップの影響を受けないので、テーマを固定している場合はこちらがベターだろう。
先達サイトでは「PC総合研究所」の対応が早かった。functions.phpを使う方法は「shdb.info WordPress メモ」から。
(2012年12月1日追記)
「WPtouch」など、スマートデバイス用プラグインを使用する場合は、そちらのfunctions.phpにも修正が必要である。プラグインの中にテーマを持っているため、バージョンアップで上書きされることに要注意。
1件のコメント
Comments are closed.