SSL環境でCeltispack oEmbed extendを使うには

SSL化サイトのブログカードが表示されなくなった時の対処方法

セルティスラボ

最近、WordPressでも他サイトへのリンクをoEmbedを使ってブログカードで表示させるのが流行りですが、表示させる方法の一つにプラグインのCeltispack oEmbed extendを使う方法が有ります。

Celtispackセルティスラボさんが公開しているWordPressのプラグインパックです。
oEmbedを使った他の方法と同様、投稿記事内に直接URLを書き込むだけで、そのURLがOGPの設定がされていると、自動的にURLを書き込んだ位置にブログカードとして表示してくれます。
(↓こんな感じ。htmlとcssはカスタマイズしてます。)

WordPress Plugin : Celtispack
WordPressでブログをしているなら絶対おすすめの Celtispack プラグインパックの紹介です。高速化や画像最…

WordPress4.4以降に備わっている機能を使うよりもサーバの負荷を減らせるなどの点で有利な為、使わせてもらっています。

動作も軽く・安定していたのですが、サイトをSSL化した途端、自サイトのページがブログカードとして表示されなくなってしまいました。

そのレスポンスをvar_dumpしてみると

「SSLサーバ(ここではxserver)のホスト名がリクエストしたURLのホスト名と一致しない。」とエラーになっています。

そこでエラーを無視してアクセスを続行させ、HTTPリクエストのレスポンスを取得出来る様にしてやります。
具体的にはHTTPリクエストでSSL検証をさせない様にhttp.sslVerifyパラメータをfalseにしてやります。(今回使っている celtispackは ver 2.3.1、WordPressはver 4.7.2 )

Celtispack oEmbed extendのコードは
celtispack/modules/oEmbed/oEmbed.php
に書かれています。
130〜131行の

の連想配列$argsでHTTPリクエストのパラメータを設定しているので、SSLを検証させない様、ここにhttp.sslVerifyパラメータをfalseにする設定を加えてやります。

これでブログカードが表示される様になります。

因みにwp_safe_remote_get() は
wp-includes/http.php の67〜71行に記述されています。

_wp_http_get_object() から返ってきたオブジェクトが
wp_safe_remote_get() に返されています。

_wp_http_get_object() もwp-includes / http.php の22〜29行に記述されています。

_wp_http_get_object()
celtispack/modules/oEmbed/oEmbed.phpの131行目の
wp_safe_remote_get( $url, $args ) の引数の $url と $args を使ってGETしたWP_Http()オブジェクトが返されます。

$argsのキーと値の詳細は、wp-includes/class-http.php の104〜143行目のコメント欄に書かれています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください