WordPressサイトの内部リンクSSL対応(HTTPS化)をコードコピペでちょっと楽にする方法

以前、WordpressサイトをSSL化する手順を紹介しました。

WordpressをhttpからhttpsにSSL化した全手順まとめ(エックスサーバー環境)
エックスサーバーが独自SSLを無料かつ無制限で利用できるようになりました。 この、エックスサーバーの「ユーザーにどんどん利便性...

この中の工程で一番作業が面倒くさくて危険なのが「内部リンク(URL)をSSL対応のものにする」という作業です。

先程の記事の手順では、「Search Regexプラグインを用いて投稿本文内を一括置換する」という手法を用いています。

Search Regexプラグイン
Wordpressデータベース内の文章を一括で検索したり、置換したりすることができるプラグイン。
Search-Regex

この置換作業が、以下のような内容の置換を何度もする必要があって、地味に面倒くさいです。

  • 自サイトのURLをSSL化
  • 非SSLのAmazon商品画像URLの置換
  • 非SSLのアフィリエイトリンク画像URLの置換(古いコードを利用中のASPの数だけ)
  • その他の非SSLの画像URL
  • その他の非SSLのiframeURL

しかも、誤って置換に失敗してしまうと、正常リンクされなくなります。そして、大失敗すると元に戻せないなんて可能性もあります(なので事前にデータベースバックアップを推奨しています)。

ですので、今回は「ちょっと面倒でリスキーなデータベース置換を行わないで内部リンクURLのSSL化をやってしまおう」という提案です。

スポンサーリンク
レクタングル(大)広告

WordPressサイトSSL化の主な4手順

事前に、WordpressサイトでSSL化するのに主に必要となる手順を紹介しておきます。

その、主な手順とは以下の4手順です。

  1. サーバー側でSSL化設定をする(MixHostサーバ利用の場合は不要)
  2. WordPressの設定からURLを変更する
  3. 内部リンク等のURLをSSL対応のものに全て置換する
  4. .htaccessをにリダイレクト用のコードを追記する

上記の1、2、4の手順は以下に詳しく書いてあるので参照してください。

WordpressをhttpからhttpsにSSL化した全手順まとめ(エックスサーバー環境)
エックスサーバーが独自SSLを無料かつ無制限で利用できるようになりました。 この、エックスサーバーの「ユーザーにどんどん利便性...

今回は、3の「内部リンク等のURLをSSL対応のものに全て置換する」の手間を軽減するWordpressカスタマイズ方法です。

内部リンク等のURLを表示前にPHPで置換する

以前の手順では、「Search Regexプラグインを用いてデータベースを置換」していました。これを、「PHP側で投稿を表示する前に置換処理で変更する」コードを書いてみました。

基本的にやることといったら、functions.phpにコードを貼り付けるだけです。

functions.phpの編集

「内部リンク等のURLを表示前にPHPで置換する」には、functions.phpに以下のコードを貼り付けます。

上記のコードでは、コンテンツ表示前に以下のような処理を行っています。

  • 内部リンクURLのSSL化
  • Amazonアソシエイト画像のSSL化
  • バリューコマース画像(インプレッション画像)のSSL化
  • もしもアフィリエイト画像(インプレッション画像)のSSL化
  • A8.net画像(インプレッション画像)のSSL化
  • アクセストレード画像(インプレッション画像)のSSL化
  • 古いはてなブログカードの iframe URLのSSL化

とりあえず、これだけはデータベースの置換作業を行わなくてもSSL化表示されるようにしてみました。

上記コードはあくまで「多くのサイトで利用されていそうな非SSL URL」を置換するものです。全てのサービスのものに対応しているわけではないので、「混在コンテンツ」となる場合は、個々の環境に合わせた置換コードを追加する必要があります。

条件を追加する場合

上記以外にも条件を追加する場合は、以下のようなコメントが書かれた部分の下に

以下のような条件をどんどん追加していってください。

PHP編集に慣れていない場合は、functions.phpを編集する前は、必ずバックアップしておいてください。

今回の方法の利点と難点

今回のコードを利用することによって生じる利点と難点は以下のようになります。

利点

思いつく利点は以下。

  • プラグインを用いて何回もデータベース内のテキストを置換する必要がない
  • データベースの内容を変更することがない
  • データベースへの変更がないので比較的安全
  • データベースへの変更がないので追加したコードを削除するだけで元に戻せる

かなり、SSL化手順を短縮することができます。

また、データベースを誤って書き換えてしまう心配がないので、安心して行うことができます。もし、エラーが出たのなら追記分のコードを削除してしまえば元に戻すことができます。

難点

SSL化手順を安全に短縮する代わりに、以下のような難点があります。

  • 表示前に毎回PHPで置換してするので多少の処理時間がかかる
  • ウィジェットなどの画像は自前でURLをhttpsにする必要がある
  • 追記:置換対象URLを普通に投稿本文に書いてしまうと置換されてしまう
    (これはプラグインを使用しても置換されます。ただ、プラグインを利用して置換した場合は後から修正して再投稿すればOK)

今回の方法は、データベースの内容を変更しているわけではないので、Wordpressの本文表示前に、毎回「非SSL URL」を「SSL対応URL」に置換して表示しています。

そのために、表示前に多少の処理時間はかかると思います。ただ、処理にかかる時間といっても0.0XXX秒程度の違いとは思いますが。

また、多少処理に時間がかかっていたとしても、ページキャッシュプラグイン等を利用する事で、表示時間的には全く変わらなくなると思われます。

まとめ

ということで、当サイトは今回の方法を使って、内部リンク及び、非SSLの画像URLを置換してすることで(ほぼ)完全にSSL対応できました。

Chromeで保護された通信(寝ログ)

やっぱり、「ツールを使ってデータベース内のテキストを一括置換する」というのは、個人的には結構ビビってしまう作業です。もちろん、置換対象文字列と変更文字列に十分注意を払っていれば、大丈夫ではありますが、人間、ミスをしてしまう可能性は0ではありません。

そんな、コンテンツのSSL対応作業なんですが、今回の方法であれば、たとえミスをしてもコードを削除することで直ぐに挽回できるのは大きな魅力かと思います。

ということで、「やっぱりデータベースを書き換えてしまうのは怖い」という方や、「PHPを用いたテキストで手軽にSSL化条件を追加していきたい」なんて方には良いかと思います。

『WordPressサイトの内部リンクSSL対応(HTTPS化)をコードコピペでちょっと楽にする方法』へのコメント

  1. 名前:なお 投稿日:2017/02/24(金) 13:55:05 ID:da1d44f68

    こんにちわ

    いつも楽しく読ませて頂いてます。

    そこで質問したい事があるのですが、
    例えば個人の外部サイトへのリンクが複数ある(例えばurlが違うサイトがそれぞれ10個とか)場合は、手動で書き換えるしかないのでしょうか??

    それとSSL化したサイトを見ていると、wwwがない場合が多いのですが、wwwは無しにした方がいいのでしょうか??

  2. わいひら 名前:わいひら 投稿日:2017/02/24(金) 20:36:33 ID:d8b3f588d

    こんにちは。
    単にAタグを用いて、個人の外部サイトにリンクが貼ってある場合は、修正する必要はありません。
    修正する必要があるのは、imgでhttp画像へインクが貼ってある場合や、iframeでhttp外部サイトへsrc属性が設定してある場合とかだと思います。

    僕の場合は、短い方が良いので、サイト開設当初からwwwをなしにしています。
    他の方も、SSLだからwwwにしていないということではないのではないかと思っています。
    自身が親しみのあるURLで利用すればよいのではないかと思います。

  3. 名前:なお 投稿日:2017/02/25(土) 03:10:10 ID:c98076c00

    なるほどー
    個人の外部サイトの場合は修正の必要がないんですね、勘違いしてました。

    wwwも最近やけに見かけなくなったので、sslで付けると良くないのかなって思ってました。
    親しみのあるURLでやってみます。
    ありがとうございました!!

  4. わいひら 名前:わいひら 投稿日:2017/02/25(土) 07:18:51 ID:952aa4950

    もちろん、相手先がhttp→httpsのURL変更を行っていて、繋がらない場合は変更が必要です。
    ただそういった場合、大抵はhttp→httpsへ飛ばすリダイレクト設定がされているので問題ないと思います。

    あと、Facebookとかは、wwwがついたままのSSL対応サイトです。
    https://www.facebook.com/
    wwwがついていないと、確かに何だか慣れなくて、気持ち悪い感じがします・笑
    https://facebook.com/
    収まりが悪いというか。