WordPress4.4にてアプリやxmlrpc経由の外部投稿の際に9時間時刻がずれる問題

WordPress4.4がリリースされました。

レンタルサーバによってはデフォルトのWPのバージョンが4.4になり、古いものが使用できなかったりしますが、そんな中、外部投稿や予約の際に記事の公開時刻が9時間時刻がずれる問題が起きている様です。

WordPress4.4で純正wordpressクライアントから時刻指定の投稿が出来なくなった

なるほど、確かにこれはちょっと問題ありですね。

というか結構正式リリース前で挿入している方多かったと思うのですが、どうして今まで話題になっていなかったのでしょうか?

検索してもあまり情報がまだ出て無い様です。

当方もサーバ経由で投稿してますのでちょっと困りました。

【バグの原因】
WordPressがバージョン4.4になる際に外部投稿のxmlrpc.phpが使用するクラスファイル「class-wp-xmlrpc-server.php」においてちょっとした時刻の形式の変換にバグがあり、
投稿日時がグリニッジ標準時になってしまっていた。
(日本とグリニッジ標準時との時差は-9時間であり、この為9時間の時刻ずれが発生した。)

当方の環境では投稿の予約でxmlrpc経由にて post_date_gmtをiso8601でpostしているのですが、これがどうも上手く渡っていない様でした。

対策パッチがWordPress4.4.1で当たる様ですが

https://core.trac.wordpress.org/ticket/35053

これでアプリからの投稿は大丈夫そうですが、Webからのxmlrpc経由での投稿はちょっとまだダメかもしれません。

また、WordPress4.4.1のリリースはマイルストーン

https://core.trac.wordpress.org/milestone/4.4.1

を見た感じもうちょっとだけかかる様です。

という事でWordPressのファイルを修正したらいけたのでちょっとご紹介します。

当方の環境で動いただけで保証等は一切ありませんので参考程度にご覧下さい。

該当ファイルを修正する場合は必ずバックアップを取った後に全て自己責任にて実行して下さい。

対象ファイルは wp-includes/class-wp-xmlrpc-server.php で

5348行目

に変更

5341行目

に変更

4994行目

に変更

4989行目

に変更

4987行目

に変更

1352行目

に変更

1344行目

に変更

パッチファイルを参考にしましたが、それだとサーバからPOSTでxmlrpc.php経由で投稿した場合に上手く行かなかったので、該当ファイルのメソッドを追いかけていったら _insert_postメソッドの所だったので1344行目の修正になってます。

しかし早く正式対応が望まれますね、何か良い方法をご存知の方いらっしゃいましたら情報をお待ちしております。

コメントにて質問を頂きましたので以下追記 2016/07/08

基本的にこのバグはWordPress4.4.1で修正されているみたいです。
https://kosukety.org/fixed-time-zone-bug-wordpress/
http://hitoriblog.com/?p=33978
まぁ、ただアプリ経由投稿の場合のみ対応しているのかもしれません。
(アプリもxmlrpcのAPI使ってるじゃんと突っ込まれそうですが、使っているものがちょっと違ってたりします。)

上記ブログにあるように
・下書きで投稿してから、webブラウザ経由でアクセスして予約投稿時間変更
・9時間ずらして予約投稿

という対応法もあります。(対応のアップデートが入るまで、これが無難ですね。)

でも、この場合、RSSの時間がずれたりして、アンテナサイト等を集客のメインに
しているサイトさんだと影響でちゃうんですよね。

それに外部投稿使う意味なくなっちゃいますもんね。

意外と話題になってないので、他に誤りが無いか、一度各種設定を見直してみるのもいいかもしれません。

以下、もし投稿プログラムをphpのpearのXML/RPC(または2)等で
自作している場合の話ですが

けっこうやっちゃうのが、投稿のxmlで渡す時間のパラメータ

と2種類があるのですが、これを間違えると9時間ずれます。
どちらを使うかは方針次第ですが、どちらか片方のみで説明の無いブログが多いので
パラメータ名は post_date_gmt しか無いと思い込んで使ってると9時間ずれます。

よくある形の使い方を以下に示していきます。

投稿、または予約したい時間を

とします。

この中に入るのは、例えば

ですね。

そして、パラメータに渡したい時間を

としますと

となります。

ここで9時間足してるのがミソです。

そして使う時は

とこんな感じですね。

パラメター名で
post_date を使うか post_date_gmt を使うか
また、使用する時間に
9時間足すか、足さないか

の2種類×2種類組み合わせで試してみるのが良いかもしれません。

もし、gmtやその辺の概念やポリシーが固まって理解しているのであれば
試す必要もなく決まってくるかと思います。

これで
・実際に記事が投稿される時刻
・ユーザに表示されるページ内に表記される投稿時刻(テーマデザイン等で投稿時刻を表示しているデザインの場合)
・RSSフィードで表示される投稿時刻(9時間前の時間になっててもGMT等が付いていればそれは正常です。)
等が問題なければOKです。

  • このエントリーをはてなブックマークに追加

『WordPress4.4にてアプリやxmlrpc経由の外部投稿の際に9時間時刻がずれる問題』へのコメント

  1. 名前:でび 投稿日:2016/01/30(土) 22:46:18 ID:5c9f705de 返信

    有難う御座いました!おかげさまでバッチリ動作してます!
    ファイル本体をダウンロード出来れば超嬉しかったです。
    コピーミスで何度かエラー出しちゃってました。

  2. 名前:サイト管理人 投稿日:2016/01/30(土) 22:56:36 ID:2d723ab69 返信

    お役に立てまして何よりです。
    class-wp-xmlrpc-server.php は、今後内容がちょくちょく変わる様ですので、
    パッチファイルをアップせずにいたのですが、今後はアップできるものはしていく様に心がけますね。
    しかし、こういうWordPressアップデートの際に時々細かい機能が使えなくなったりするのは本当に困りますよねぇ。

  3. 名前:まーくん 投稿日:2016/07/08(金) 02:09:57 ID:47f84007c 返信

    こちらの情報をもとにファイルをいじろうと思ったのですが、内容が変わったのか行数やソースが若干異なっており、困っています。9時間以内の予約投稿ができない状況です。何か最新の情報を掲載しているサイトなどご存知でしょうか?教えていただけると幸いです><

    • 名前:サイト管理人 投稿日:2016/07/08(金) 12:32:36 ID:68836ba34 返信

      このファイルのソースは日々のアップデートで頻繁に変わります。
      WPのバージョンによって全然変わってくるので明確に指定ができ無い所が心苦しいのですが、
      どうしてこの様な修正をするのかを理解して、その対応策を現行のバージョンではどの様に行えば良いか考え、
      また、他に影響が出ない様に修正する必要が出てしまうので、そういうのがお好きな方意外にはあまりオススメできない方法です。
      また、この問題はアップデートで直ったといった人が出ていますし、あまり話題にもなってないので
      他の要因も考えられますので色々設定を見直すのも手ではあります。
      一応、記事に追記しておきましたので、お時間あればご一読下さい。

  4. 名前:まーくん 投稿日:2016/07/11(月) 22:44:05 ID:74ed14ee6 返信

    ご教授ありがとうございます^^
    この記事を参考に1つ1つ潰してできました。
    結果的には1300行台の
    $post_data[‘post_date_gmt’] = iso8601_to_datetime( $dateCreated, ‘GMT’ );
    の’GMT’の削除でいけました

    レアな情報ありがとうございました!

    • 名前:サイト管理人 投稿日:2016/07/12(火) 15:51:45 ID:1d75ebbc3 返信

      無事に解決おめでとうございます!
      少しでも何かの参考、お役に立てた様で嬉しい限りです。
      こういうレアな情報はなかなか無いのが辛いところなので、これからも何かあれば共有できればと思っております。

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)