WordPress内のリンクを絶対パスから相対パスに変更する方法を紹介します。

WordPressは、動的にサイト内の階層を変更できることから、
サイト内のリンクは標準で、絶対パスが使用されています。
テンプレート内に相対パスで記述して、リンクエラーなどを起こしてしまうと、
SEO的にも大変不利になってしまいます。
しかし、

・作業の効率化
・ファイルサイズの軽減
・ソースの簡素化
・ドメインの引越を考慮

を目的とするのなら、
以下に紹介する方法で、絶対パスのリンクを相対パスのリンクに変更が可能です。

絶対パスと相対パス

ここで説明するのは、今いるページからの相対パス「../../◯◯/」ではなく、ルートを基準にした相対パス、ルート相対URL「/(スラッシュ)」での相対パスです。
実質的には、絶対パスのくくりになりますが、今回はこれを相対パスとして説明いたします。

WordPress内のリンクを相対パスに!

WordPress内のリンクを相対パスに変更するには「functions.php」に以下を追記します。
*「functions.php」が無い場合は、ファイルを作成してください。

//絶対パス→相対パス
function make_href_root_relative($input) {
    return preg_replace('!http(s)?://' . $_SERVER['SERVER_NAME'] . '/!', '/', $input);
}

これだけで「絶対パス」を「相対パス」に変更できます。

注意!
テンプレートによって、ホームへのリンクタグが

<?php bloginfo('url'); ?>

となっている場合が有りますが、上記のリンクタグだと相対パスになりません。
その場合は

<?php get_home_url('url'); ?>

に置き換えてみてください。
どうでしょうか。相対パスになったと思います。

ついでにパーマリンクも相対パスにしてしまいましょう。

先程と同様「functions.php」に以下を追記します。

//パーマリンク絶対パス→相対パス
function root_relative_permalinks($input) {
    return make_href_root_relative($input);
}
add_filter( 'the_permalink', 'root_relative_permalinks' );

テンプレートのパーマリンクを設定したい場所に「」を使用すると、
相対パスになります。

両方とも記述したソースを以下に書いておきます。

//絶対パス→相対パス
function make_href_root_relative($input) {
    return preg_replace('!http(s)?://' . $_SERVER['SERVER_NAME'] . '/!', '/', $input);
}

//パーマリンク絶対パス→相対パス
function root_relative_permalinks($input) {
    return make_href_root_relative($input);
}
add_filter( 'the_permalink', 'root_relative_permalinks' );

変更後は、ここもチェック!

相対パスになった〜
と思ったら、他に不具合が出ていないかも念のため確認しましょう。
プラグインとの兼ね合いがうまく行ってない場合もあります。
「All In One SEO Pack」を使用している場合、「title」や「description」が、正常に機能しない場合もまれにあります。
その場合は「Yoast SEO」に変更するなどの対処が必要になります。

制作において、どの機能を優先するか優先順位を考えてカスタムしていくことが成功への近道になりますね。

「functions.php」の扱いには、十分注意して下さい。記述を間違えるとサイトが閲覧できなくなったりします。
変更前は必ずバックアップを保持しておくようお勧めします。