WordPress3.8で2014/1/14ごろからツイートの埋め込みができなくなった原因は、Twitter APIの仕様変更によるものでした

2014/1/14以降、Twitter APIの仕様変更でHTTPSでの通信が必須になりました。(参考リンク:Restricting api.twitter.com to SSL/TLS traffic | Twitter Developers)

TwitterAPIの公式アカウントでも以前からアナウンスがありました。

Important: On Jan 14, 2014 all requests to http://api.twitter.com  will require SSL & disallow plaintext connections https://dev.twitter.com/discussions/24239 …

(引用:「https://twitter.com/twitterapi/status/421688035701309440」)

その影響で、WordPressのバージョン3.8では、記事内などにツイートの埋め込みができなくなりました。

似たような状況の方はいらっしゃるようで、フォーラムにも質問が投稿されています。(Twitter Embeds Not Working in WordPress 3.8 (2 posts))フォーラム中の回答にもありますが、WordPress3.8.1へのバージョンアップによって改善されるようです。

バージョンアップによって、どの箇所が変更されるのか

興味があったので、具体的にどのファイルがどう変更されるのか確認しました。

コアファイル「wp-includes/class-oembed.php」中には、以下のようにTwitter APIに関する記述があります。

変更前

'#https?://(www\.)?twitter\.com/.+?/status(es)?/.*#i'=> array( 'http://api.twitter.com/1/statuses/oembed.{format}', true ),

変更後、こうなる

'#https?://(www\.)?twitter\.com/.+?/status(es)?/.*#i'=> array( 'https://api.twitter.com/1/statuses/oembed.{format}', true ),

(参考リンク:#26844 (Twitter oembeds not working because of Twitter API change) – WordPress Trac

変更箇所がわかりにくいかもですが、HTTPS通信「https」に変更することで埋め込みは有効になります。WordPress3.8.1へのバージョンアップ時期を待たずに上記ファイルの該当箇所を変更することで、即座に埋め込みは有効になりますが、コアファイルの変更は極力控えたほうがよいと判断しています。

私は、原因がわかったのでお客さんにも説明できる材料ができただけで十分ですので、次期アップデートを待ちます~。

一時的な解決方法

どうしても「なんとかしたいわ・・・」という方は、コアファイルをいじることなく、以下の方法で対応できますので、参考程度にご覧ください。テーマフォルダ内の「functions.php」ファイルに追記する方法です。

方法「wp_oembed_add_provider」を使う

Function Reference/wp oembed add provider」を参考にしました。

<?php
wp_oembed_add_provider( '#https?://(www\.)?twitter\.com/.+?/status(es)?/.*#i', 'https://api.twitter.com/1/statuses/oembed.{format}', true );
?>

functions.php の書き方についてはこちらをご参考ください。

他にもいい方法あるのかな。もしご存知でしたら、ご教示頂けますと嬉しいです。

2014/1/24追記

WordPress3.8.1日本語版へのバージョンアップ作業が可能になっていましたので、アップグレードしました。(自動更新を有効にされている方は、特に作業をすることなく自動でアップグレードされるはずです)無事にツイート埋め込み機能が正常に動作することを確認しました。

うまくいってますね~。

著者:bouya Imamura