サイトをhttps にした時にプラグインが http を参照することで生じるエラーの対処

【現象】

サイトを https 化したときに header.php 内の

 <?php wp_head() ?>

で生成されるコード内に、 https と http のリンク参照が混在してしまい、

「Mixed Content: The page at ‘https://mygshop.net/siteinfo/’ was loaded over HTTPS, but requested an insecure script ‘http://mygshop.net/wp-includes/js/jquery/jquery.js?ver=1.11.3′. This request has been blocked; the content must be served over HTTPS.」

のようなエラーが出て、スタイルシートなども反映されなくなる

【原因:参考URL: http://coneta.jp/11936.html

原因の一つに、プラグインが出力するcssやjsファイルのパス指定がhttps接続しているにも関わらず、css・jsパスがhttp://~になっていることが問題です。( https通信時は、js・css・画像ファイルのパスは、全てhttpsから始まっている必要があります )
ブラグイン側がcssパスを生成する際に、テンプレートパスを取得するためのテンプレートタグget_option(‘siteurl’)をコールしていることが影響しています。このテンプレートタグは管理画面で設定してあるサイトアドレスをそのまま返してくれるだけなので不完全です。HTTPS対応サイトではあまり推奨できません。
HTTPS対応をきちんと意識しているプラグインであれば、site_url()をコールしています。このテンプレートタグは今現在表示中のサイトURLを返してくれるので、HTTPS接続中であればhttps://~のURLを取得することができます。

【解決策: ブラウザへ出力時にパス置換を行うことで解決!】

プラグインのソースファイルに手を加えるのは面倒なのでもっと簡単な方法を紹介しましょう。
header.phpに書かれているwp_head()が実行されたタイミングでブラグインのjs・cssパスが出力されるので、その内容を書き換えてしまいます。

<?php
/** HTTPS通信時、プラグインがcss・jsパスをhttp://~で出力するのを対策する。 */
   ob_start();
   wp_head();
   $wp_head_contents = ob_get_clean();
   $wp_head_contents = str_replace(‘http://’, ‘//’,$wp_head_contents);
   echo($wp_head_contents);
?>

★ wp_head()が吐き出す内容をob_start関数で出力バッファリングします。バッファリングした内容を変数に格納して、変数内の文字列にhttp://~で始まるパスがあれば、//~に置換した上でブラウザに出力しています。

こうすることで、http・httpsのどちらにも対応できるようになります。

‐ END –