WordPressの画像リンクのパスを絶対パスから相対パスに変更する方法

WordPressの画像リンクのパスを絶対パスから相対パスに変更する方法
2018年04月14日2023年10月19日

WordPressで記事中に画像を挿入すると、通常であれば「http://ドメイン/~」とドメインを含むURLが生成あれ画像リンクとしてimgのsrcに記述されます。

WordPressの開発環境と運用環境が別々で、まるごとデータ移行などすると、記事内の画像リンクパスを変更しないといけません。

そこで、記事中に挿入される画像のsrcにドメイン部分が入らないようにする方法を紹介します。

やりたかったこと

今回やりたかったことは、画像リンクに付与されるドメイン部分を削除した状態でルートを基準にした相対パスの記述です。

■デフォルト
https://worpreya.com/wp-content/uploads/2017/12/logo.png

■ルートを基準にした相対パス(ドメインを削除した状態)
/wp-content/uploads/2017/12/logo.png

上記のようにルートを基準にした相対パスにすることで、開発環境と本番環境のドメイン部分が異なっていても問題なく画像を表示できるメリットがあります。

MySQLで置換すれば早いという方もいるかと思いますが、MySQLに詳しくない人から見ればちょっとリスキーなため上記の方で対応することにしました。

絶対パスから相対パスに変更する手順

今、使用しているテーマのfunctions.phpファイルに下記コードを追加するだけでドメイン部分を除いた画像リンクを生成することができます。

functions.php
function delete_domain_from_attachment_url( $url ) {

	if ( preg_match( '/^http(s)?:\/\/[^\/\s]+(.*)$/', $url, $match ) ) {
		$url = $match[2];
	}
	return $url;
}

add_filter( 'wp_get_attachment_url', 'delete_domain_from_attachment_url' );

上記のソースは、ドメインが含まれている場合は、ドメイン部分を除いてルートを基準にした相対パスに変更するプログラムになっています。

また、画像を挿入する際、画像のリンク付きで画像を挿入する場合は、画像リンクにドメイン部分が入ってしまうので、下記コードも追記することでドメイン部分を削除した状態で画像リンクを生成することができます。

add_filter( 'attachment_link', 'delete_domain_from_attachment_url' );

動作確認

動作確認は、記事中に画像を挿入してみてください。

挿入時、ソースを見ると、ルートを基準にした相対パスに変わっていることがわかるかと思います。

■imgタグ

<img src="/wp-test/wp-content/uploads/2018/01/noimage-300x180.png" alt="" width="300" height="180" class="alignleft size-medium wp-image-109" />

■画像リンク付きimgタグ

<a href="/wp-test/archives/177/noimage" rel="attachment wp-att-109"><img src="/wp-test/wp-content/uploads/2018/01/noimage-300x180.png" alt="" width="300" height="180" class="alignleft size-medium wp-image-109" /></a>

まとめ

使用中のテーマのfunctions.phpファイルにコードを記述することで画像リンクのパスを絶対パスから相対パスに変更することができました。

今回の対応はテーマのfunctions.phpファイルにコードを追記していますので、テーマを変更する場合は新しいテーマにも同様な記述を入れる必要があります。

コメント

コメントを残す

お名前(任意)
コメント:新規