WordPressカスタマイズ事例

[メディア追加]でイメージタグを挿入したときのURL絶対パス表記からドメイン部分だけ抜く

サイト制作をやっていると、どこかの開発用ドメインで開発してから本番ドメインに移行する、なんてことがよくあります。
そのときにやっかいなのが、固定ページなどでイメージやファイルを[メディア追加]して挿入した時のURLです。
なぜかWordPressでは、挿入したイメージタグのURL表記が絶対パスになってしまうんですよね。

<img src="https://kaiza.jp/wp-content/uploads/2017/10/XXX.png">

みたいに。
そのため、本番ドメインに移行するときにはすべてのイメージタグのURL表記を開発用ドメインから本番ドメインに置換しないといけません。

開発用ドメインでサイト実装が済んでいよいよ新サイト公開。本番用ドメインへの移行はどうするか?

もちろん上の記事に書いた手順でDB一括変換ツールを使って置換してしまえばいいわけですが、事これが
“クライアント側ですでに動いている本番WordPressがあって、その中に入れるテーマと記事DBだけを納品する”
なんて場合には、今すでに稼働中の本番DBをこちらが置換ツールを使って作った本番用DBにごっそり置き換えてもらうなんてことはできません。本番ドメインではすでにWordPressが動いているわけですからね。

そうなるとこの「イメージタグのURL表記が絶対パス」になっていることが足かせになってきます。
どうにかドメインだけ消せないか?
つまり

<img src="https://kaiza.jp/wp-content/uploads/2017/10/XXX.png">

ではなくて、

<img src="/wp-content/uploads/2017/10/XXX.png">

こうなるようにするということです。
これならどのドメインにぶら下げても大丈夫。
 
方法はシンプルです。
これからテーマを作っていこうという前に、そのテーマのfunction.phpに以下を記述します。

function del_domain_from_image_url( $url ) {
    if ( preg_match( '/^http(s)?:\/\/[^\/\s]+(.*)$/', $url, $match ) ) {
        $url = $match[2];
    }
    return $url;
}
add_filter( 'wp_get_attachment_url', 'del_domain_from_image_url' ); //画像取得時にドメイン部分を削除
add_filter( 'attachment_link', 'del_domain_from_image_url' );

その後、固定ページでコンテンツを作ると、イメージタグからドメイン部分が抜けてタグが吐き出されるようになります。


関連するWordPressカスタマイズ事例