大晦日と WordPress 2.9.1 RC1

いろいろありました 2009年もあっというまに、日本は大晦日です 🙂

師走の中、WordPress 2.9.1 の準備も着々と進み、WordPress 2.9.1 RC1 が 30日にでております。 2.9.1 で修正される不具合で、いくつかプラグインの動作が直るものがありますので、紹介したいと思います。

まずはブログでもアナウンスがありました、wp-cron が動かない問題です。

WordPress | 日本語 » WordPress 2.9.1-1

残念なことに、先日の 2.9 リリースと一部のバージョンの PHP 組み合わせで cURL 拡張に関するバグが起こることが判明しました。該当するバージョンの cURL では、予約投稿およびピンバックが正しく処理されません。

wp-cron は WordPress のスケジュールイベント系を司るモジュールのことですが、これのタイムアウト待ち時間の設定が一部のサーバで速くなりすぎるため、スケジュール実行が発動しないという問題です。

予約投稿やピンバック、またスケジュールを使っているプラグインも影響を受けますが、WordPress Related Post for WordPress もそのひとつで、該当サーバでは関連が取得できなくなっていると思います。(このプラグインは辞書作成で投稿時間や過去記事の閲覧が遅くならないように wp-cron によるバックグラウンド処理を行っています)

とりあえず辞書作成について、2.9.1 までは http://www.example.com/wp-cron.php に手動でブラウザからアクセスすることで対処できます。(www.example.com はお使いのサーバスペースにあわせてください)

次はタイムゾーン問題。

以前書きましたとおり、2.9 より PHP のタイムゾーンの設定を WordPress が UTC に変更する動作が加わりました。

その後、もう少しプログラムを追っていくと、(wp_)options の gmt_offset という値を取得しようとするとフックにより、UTC に設定したタイムゾーンを、timezone_string 値(Asia/Tokyo とか)で再設定する動作があることが分かりました。

影響をうけたのが、 current_time() という WordPress コアの関数で、timezone_string が存在するとタイムゾーンの再設定により、日本であれば +9 +9 の時間 (2回ずらしてしまう)を返してしまうようです。 wp-kyodeki プラグインが正しく日またがりで値がクリアされないケースがこの件です。

パラ見ですが、xmlrpc 経由の投稿日付、ファイルアップロード時に作成される年月ディレクトリ、テンプレートタグのカレンダーのめくりの処理などの時間が +9 ずれる可能性がありそうです。

で、最初現象が分からなかったのがなる人とならない人がいることで、どうも昔から WordPress を使っている人で、最近、管理画面の general setting の更新をしてない方は timezone_string 値が入っていなくて、gmt_offset だけが入っている状態。 この場合は current_time() はうまく動作します。 ぼくとかおでさんとか(笑)

General Setting で都市名で値を設定すると、timezone_string に値が入るため current_time() がうまく動作しなくなります。

timezone01

幸いなことに、WordPress 2.9.1 より UTC 形式での細かい値を設定できるようになりました。 この設定を使った場合、timezone_string に値が入らなくなり、うまいこと current_time() が正しい値を返してきますので、不具合で困ったことになっている方は、2.9.1 がでてアップグレードした後、日本のタイムゾーンの方は

timezone02

こうしてください。(ドロップダウンの下の方に追加されています) これで修正されると思います。

current_time() の件については、Nao さんにご協力(ぼくは英語が書けません。。)をいただきましてチケットをきってあります。 Nao さん、お忙しいところありがとうございました! 🙂

3.0 にまわされていますが、おそらく修正されると思います。 それまでは、UTC な Timezone 設定でしのぐ方向で。 🙂

#11672 (current_time() does not correctly retrun localized time) – WordPress Trac

When you set you set timezone using a city name, current_time() function in functions.php does not return correct local time.

てなわけで、 +9 の日本は粛々と除夜の鐘が鳴る時間に進んでおります。

みなさま、良いお年を・・・!!

コメントを残す