WordPressのプラグインLifestreamの時刻表示の不具合について

追記(2010年1月14日):Lifestreamのバージョン を0.99.9.6にアップデートしたら少し挙動が変わったため、念のためこちらも参照して下さい。→[WordPressのプラグインLifestreamの時刻表示の不具合について(改)]

WordPressのプラグインでTwitterのつぶやきを表示するプラグインを探していたら「Lifestream」というプラグインが見つかった。TwitterだけではなくFlickr等も時系列で表示してくれる。

以前は「Twitter Tools」を使用していた。こっちはTwitterのつぶやきを記事として投稿してくれるんだけど、他のブログ記事と混じったり、同じつぶやきを何度も投稿したりとイマイチ使い勝手が良くなかったので、「Lifestream」に乗り換えることにした。

ただ、幾つか問題があり、タイムラインの投稿時間の表示がおかしい。厳密に言うとマイナス9時間で表示されているのだ。午前4時30分につぶやいたのに表示は前日の午後7時30分につぶやいたことになっている。まぁ、時系列には並んでいるから気にしなければいいじゃんっ、て思うもどうも気になる。あとはタイムラインの日別けに不具合がある。こっちも今日つぶやいたのに昨日つぶやいたことになってしまう問題だ。

というわけで、調べてみた。
まずタイムラインの日別けの不具合(今日投稿したものが昨日投稿したことになっている)が出ている。というのが幾つか見つかった。それは、
wp-content/plugins/lifestream/inc/core.php
の97行目の
return $this->date + LIFESTREAM_DATE_OFFSET;

return $this->date;
に書き換える。これで日分けの不具合は解消されたけど、投稿時間の表示が直っていない。
これも、調べてみるが同じ問題が出ている人はいないようで、結局自分で解決しなくちゃならなくなった。
面倒だが仕方ない・・・。

まず、表示がマイナス9時間になっているってことは単純にタイムゾーンの設定ミスって事が考えられる。っていうかそれ以外考えられないわけだが、とりあえずWordPressの設定を確認。これは問題なし。次にもしやと思い、Twitter側の設定を確認。これも問題なし。ということはあとはプラグイン側の問題であろうと考える。
セオリーどおり、表示部分のソースを確認する。
/wp-content/plugins/lifestream/themes/default/main.inc.php
のファイルの該当部分の変数($event->timestamp)を出力してみる。タイムスタンプが入っていたので、その変数のセットした直後に、32400を足してみる。
$event->timestamp += 32400;
すると、やったー!問題なく正しい時間を表示した。

でも、<abbr>タグのtitle要素での表示が変だ、本来は
<abbr title=”2010-01-09T03:57:27+09:00″>3:57am</abbr>
となるはずが、
<abbr title=”2010-01-09T03:57:27+00:00″>3:57am</abbr>
となってしまう、+09:00と+00:00の違いだ。気にしない人は気にしないかもしれないが、元プログラマーとしてはこのタイムゾーンの違いは許せない。というか気持ち悪い。となると問題は”2010-01-09T03:57:27+00:00″を吐き出している部分だ。そのソース部分を見てみると
<?php echo date("c", $event->timestamp); ?>
とある。
PHPのdate関数をチェックしてみる。
date("c", $event->timestamp);の1番目のパラメータの’c’があやしい。これが何をしているかと言うと、タイムスタンプから”ISO 8601 日付”を出力している。つまり”2010-01-09T03:57:27+00:00″を戻しているのだ。ってことはいくらタイムスタンプに9時間分を足しても”+00:00″の部分は変わるはずは無い。ということはそもそもタイムゾーンの設定が間違ってるってこと?

次ははタイムゾーンを設定しているところを見つけて修正してみる。
/wp-content/plugins/lifestream/inc/core.php
の2198行目付近に
date_default_timezone_set('UTC');
とあるので、これを
date_default_timezone_set('Asia/Tokyo');
と変更してみる・・・。
変化なし。
と思ったら、ダッシュボードのLifestreamの設定画面の日付は直った。でもサイト側の表示は変わらない。
え~い!こうなったらトップの部分で強制的にタイムゾーンの設定をしてしまえということで、
/wp-content/plugins/lifestream/lifestream.php
のなるべく上の方(自分はコメントのすぐ下)に
date_default_timezone_set('Asia/Tokyo');
を挿入。これでどうだ!
やったー!ちゃんと表示した!
<abbr title=”2010-01-09T03:57:27+09:00″>3:57am</abbr>
“+09:00″もちゃんと出ている。
ほんとにこれでいいのか分からないけど、まぁ、ちゃんと表示されているからこれで良しとしよう。

「今回やったことのまとめ」

●タイムラインの日別けの不具合の修正
/wp-content/plugins/lifestream/inc/core.php
の97行目の
return $this->date + LIFESTREAM_DATE_OFFSET;

return $this->date;
に変更。

●WordPressのダッシュボードのLifestreamの設定画面の時間表示の不具合の修正
/wp-content/plugins/lifestream/inc/core.php
の2198行目付近に
date_default_timezone_set('UTC');
とあるので、これを
date_default_timezone_set('Asia/Tokyo');
に変更。

●サイト側の時間表示の不具合の修正
/wp-content/plugins/lifestream/lifestream.php
のなるべく上の方(自分はコメントのすぐ下)に
date_default_timezone_set('Asia/Tokyo');
を挿入。

作業環境
WordPress(2.9.1)
Lifestream(0.99.9.5)
PHP(5.2.5)

タイトルとURLをコピーしました