はじめまして。wordpressというすばらしいモジュールを提供していただきありがとうございます。まだ公開前のサイトですがwordpressを利用させていただこうと取り組んでいるところです。そこで、色々な投稿方法で投稿の練習をしているのですが、ubicastを利用した場合にタイムスタンプが実際の投稿時間より9時間前になってしまい、自分では解決できないでいます。xoopsの一般設定のタイムゾーン、管理者のタイムゾーン、投稿者のタイムゾーンは東京に設定してあり、wordpressのtime_differenceは0にしています。ubicastの設定は、投稿時間を指定する設定でも指定しない設定でも同様に9時間ずれてしまいます。どこの設定を見直せばよいかヒントをいただけないでしょうか?
これは、設定のせいでは無くて、xmlrpc側で日付文字列判定のバグのようです。modules/wordpress/xmlrpc.php 中に、 $dateCreated = iso8601_decode($contentstruct['dateCreated']); という行が、2箇所ありますが、この部分を、 $dateCreated = preg_split('/([+\-Z])/',$contentstruct['dateCreated'],-1,PREG_SPLIT_DELIM_CAPTURE); if(count($dateCreated) == 3) { $dateCreated[2] = str_replace(':','',$dateCreated[2]); } if ($dateCreated[1] == '+') { $dateoffset = intval($dateCreated[2])*36; } else if ($dateCreated[1] == '-') { $dateoffset = -intval($dateCreated[2])*36; } else { $dateoffset = 0; } $dateCreated = iso8601_decode($dateCreated[0],1)- $dateoffset + (get_settings('time_difference') * 3600); に置き換えて頂けませんでしょうか。本来は、iso8601_decodeの定義自体を直すのが正しいと思うのですが、こちらは汎用のクラスライブラリがベースとなっているため、とりあえずWP固有部分での修正にて対応しています。
$dateCreated = iso8601_decode($contentstruct['dateCreated']);
$dateCreated = preg_split('/([+\-Z])/',$contentstruct['dateCreated'],-1,PREG_SPLIT_DELIM_CAPTURE); if(count($dateCreated) == 3) { $dateCreated[2] = str_replace(':','',$dateCreated[2]); } if ($dateCreated[1] == '+') { $dateoffset = intval($dateCreated[2])*36; } else if ($dateCreated[1] == '-') { $dateoffset = -intval($dateCreated[2])*36; } else { $dateoffset = 0; } $dateCreated = iso8601_decode($dateCreated[0],1)- $dateoffset + (get_settings('time_difference') * 3600);
のぶのぶさま、お忙しいなか、ありがとうございました。お教えいただいた書き換えをしたところ、正しい投稿時間で登録されるようになりました。ありがとうございました。
このプログラムは KENT 氏の yybbs を xoops(PHP) に移植したものです - KENT -