WordPressで一部スクリプトが9時間ズレる場合の対応


この記事は2010年9月に掲載されたものです。
状況が変わったり、リンク先が変わっている可能性があります。

WordPressを2.9にしてから、投稿などのタイプスタンプは正しいのに、内部で動かしているスクリプトの時間だけが9時間ズレるという現象が起こった。例えば、日付が変わったら表示を変えるスクリプトを書いても、午前9時にならないと変わらない。アクセスカウンタもリセットされない。最初はサーバ側のタイムゾーン設定を疑ったが、確認してもおかしくないし、WordPress上のスクリプトだけが狂う。

調べてみると、スクリプトの日付/時刻関数で使用されるデフォルトタイムゾーンが、UTC(協定世界時)になったため。最新の3.0.1でもそのままなので、対応が必要だ。方法は次の4つ。

  1. 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' );
    
  2. コメントアウトせず、UTCに9を足す。
    // Set default timezone in PHP 5.
    if ( function_exists( 'date_default_timezone_set' ) )
    	date_default_timezone_set( 'UTC+9' );
    
  3. UTCをJTC(日本標準時)にしてしまう。
    // Set default timezone in PHP 5.
    if ( function_exists( 'date_default_timezone_set' ) )
    	date_default_timezone_set( 'JTC' );
    
  4. 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にも修正が必要である。プラグインの中にテーマを持っているため、バージョンアップで上書きされることに要注意。