サイトをSSL化 (https) したときにハマった

知人がサイトにSSLを導入したときに、WordPressの設定で http を https に

変えたりした後、トップページは正しく表示されるのですが、他のページが

表示はされるもののスタイルシートが適用されないという問題に遭遇していました。

ブラウザのデベロッパーログをみると、

Mixed Content: The page at 'https://xxx/yyy/' was loaded over HTTPS, but requested an insecure script 'http://xxx/wp-includes/js/jquery/jquery.js?ver=1.11.3'. This request has been blocked; the content must be served over HTTPS.

というエラーがいくつも出ており、https とhttp が混在したようなアドレスが生成されているよう。。。

WordPressのダッシュボードできる設定やプラグインの設定を変えても、どうにも解決しないので、

問題の箇所を絞り込んでいくと、

header.php 内の

<?php wp_head() ?>

の中で生成されてくるコードに http が含まれていることまで分かりました。

すったもんだした後に結局ネットでググって以下の解決方法にたどり着きました。

header.phpに書かれているwp_head()コード辺りに細工を施す。

<?php
   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の戻りをストリングバッファで受けて、http:// を 相対アドレスに変換する処置

とでもいいのでしょうか。 こちらの対処で何とか解決することができました。

元ネタは3年くらい前のブログでしたので、3年経ってもあまり状況が改善されていないのかな・・・

何はともあれ、知人をヘルプ出来て良かったです (^^;




あわせて読みたい