出力ソースの絶対パスを相対パスに一括で書き換える

WordPress 6.4.3
広告WordPress・PHP を学べる本

Amazonのアソシエイトとして、WordPress functions.phpは適格販売により収入を得ています。

概要説明

WordPressでは絶対パス(https://~)を使うように設計されているのですが一括で相対パス(/~)に変更したい時用のカスタマイズ。

コード

functions.php
/*----------------------------------------------------
 記事の本文の中の絶対パスを相対パスに書き換える
 (head の canonical・og:url・og:image・構造化データは
   絶対 URL が必要なので書き換えない)
----------------------------------------------------*/
if ( !function_exists( 'my_relative_content_url' ) ){
    function my_relative_content_url( $content ) {
        // 管理画面・RSS フィード・REST API(ブロックエディター)では書き換えない
        if ( is_admin() || is_feed() || ( defined( 'REST_REQUEST' ) && REST_REQUEST ) ) {
            return $content;
        }

        $host = wp_parse_url( home_url(), PHP_URL_HOST );
        if ( empty( $host ) ) {
            return $content;
        }
        $host = preg_quote( $host, '#' );

        // href="…" src="…" srcset="…" の頭にある https://ドメイン だけを消す
        // (https://ドメイン.example.com のような別のドメインは書き換えない)
        return preg_replace(
            array(
                '#(?<=["\']|, )https?://' . $host . '(?=/)#i',   // https://ドメイン/… → /…
                '#(?<=["\'])https?://' . $host . '(?=["\'])#i',  // https://ドメイン → /
            ),
            array( '', '/' ),
            $content
        );
    }
    // 20:画像の srcset が付いたあと(wp_filter_content_tags は 12)に書き換える
    add_filter( 'the_content', 'my_relative_content_url', 20 );
}

 

ふだんは絶対パスのままがおすすめ

前のコードは、ページ全体の https://ドメイン を消していたため、canonical や RSS のリンクまで相対パスになっていました。サイトによっては og:url・og:image・構造化データも相対パスになります。これらは絶対 URL が必要なので、検索エンジンや SNS で正しく扱われなくなります。上のコードでは、書き換えるのを記事の本文の中だけにしています。

どうしても相対パスにしたいとき以外は、使わないほうがよいと思います。

問題となる例 – Pagespeed Insights

出力ソースの絶対パスを相対パスに一括で書き換える

SiteBeacon(サイトビーコン)

サイトが止まったら、すぐに気づける。

ホームページを 5 分ごとにチェックして、止まったとき・エラーが出たとき・SSL やドメインの期限が近いときに、メールでお知らせします。2 サイトまでは、ずっと無料で使えます。

SiteBeacon を見る サイトを直す相談をする

監視で気づいたあとの直す作業も、同じ担当がお受けします。