[WordPress] 個別記事内の画像URLを強制的にSSL・HTTPSに対応させる

WordPressでSSL化をする際に、個別の記事内に記述された画像URLのリンクを強制的にSSL・HTTPSに対応させる方法を調べてみました。

WordPressをSSL化する際に生じる問題

WordPressをSSL化する際に面倒なのが、過去に書いた記事の中のURL。特に画像URLは、SSLページ内でhttp://があると、Mixedコンテンツ扱いとなってブラウザでエラー表記されてしまいます。これではセキュリティ上もSEO上もよろしくはないので対策が必要となります。

考えられる対策とメリットとデメリットを書き出してみると、、、

メリット デメリット
(1)DBを書き換える 一括でできる 新しい記事には適応されない
(2)プラグインを使う 手軽で知識がなくてもできる プラグインに依存する・重くなるかも?
(3)テーマの関数を編集する 比較的手軽、効果が永続的 知識が少し必要

という感じかと思います。

今回は、WordPressの動作にも影響が少なく、手軽にできて、効果も永続的な(3)の「テーマのfunction.phpをいじる」で実践してみます。

テーマ関数(function.php)に置換スクリプトを追記する

テーマ関数に下記のコードを追記します。記述する場所は、ファイルに一番下で問題ないと思います。

置換方法やフックのタイミングは適宜変更してください。PHPやWordPressのフックをよく知らない人は、下記のままでも良いと思います。

function forceSSl($content) {
    global  $referalString;
    //http:を削除
  $content = preg_replace('/src\=\'http:/', 'src=\'' . $referalString, $content); //シングルクォート版
    $content = preg_replace('/src\="http:/', 'src="' . $referalString, $content); //ダブルクォート版
    return $content;
}
add_action('the_content', 'forceSSl');

URLをくくる際にシングルクォートの人とダブルクォートの人がいるかもしれないので両方記載していますが、どちらか片方でも問題ありません。

このフックを追加することで、「http://example.com/hoge.jpg」といった画像URLを「//example.com/hoge.jpg」に置換します。頭に「http」を入れないことで、サイトがHTTPSならhttpsを、HTTPならhttpを、ブラウザが自動で判別してくれます。


数行のコードで、ページ内の画像URLをSSLにすることができました。

SSL・HTTPS化は今後対応が必須となりそうな情勢ですが、サイトの記事コンテンツを書き直すのはかなり大変なので、ぜひ使ってみてください。