WordPressで挿入する画像のsrcを相対リンクにする【発展版】

一番最初に書いた記事「WordPressで挿入する画像のsrcを相対リンクにする」では、環境移行がしやすいよう、単に画像のドメイン部分をカットしていました。
ただし、これには1点問題があってRSSリーダーなどで表示する際に、ドメインが異なるため、画像が表示できていませんでした。

この問題に対応するため、以前のコードを元にドメイン部分をショートコード化し、表示する際に、運用中のドメインを追加するように改正してみようと思います。

ドメインを表示するためのショートコードは [domain] として、相対リンクのurlに付け足します。

CODE 1

function delete_host_from_attachment_url( $url ) {
    $regex = '/^http(s)?:\/\/[^\/\s]+(.*)$/';
    if ( preg_match( $regex, $url, $m ) ) {
        $url = '[domain]' . $m[2];
    }
    return $url;
}
add_filter( 'wp_get_attachment_url', 'delete_host_from_attachment_url' );

ドメインを出力する [domain] ショートコードは、一般設定のサイトのアドレス (URL)を元にして、ドメイン部分のみを抜き出して出力するようにします。

code 2

function domain_shortcode() {
	if ( preg_match( '|^https?://[^/]+|', get_option( 'home' ), $m ) ) {
		$domain = $m[0];
	} else {
		$domain = '';
	}
	return $domain;
}
add_shortcode( 'domain', 'domain_shortcode' );

これらを合わせた CODE 3 をテーマの functions.php に記述すれば、ドメインを変更した場合でも自動的に画像のパスを変更し、RSSリーダーなどでも問題なく表示することができるようになります。

CODE 3

function delete_host_from_attachment_url( $url ) {
    $regex = '/^http(s)?:\/\/[^\/\s]+(.*)$/';
    if ( preg_match( $regex, $url, $m ) ) {
        $url = '[domain]' . $m[2];
    }
    return $url;
}
add_filter( 'wp_get_attachment_url', 'delete_host_from_attachment_url' );


function domain_shortcode() {
	if ( preg_match( '|^https?://[^/]+|', get_option( 'home' ), $m ) ) {
		$domain = $m[0];
	} else {
		$domain = '';
	}
	return $domain;
}
add_shortcode( 'domain', 'domain_shortcode' );

投稿画面でのソースサンプル

<a href="[domain]/wp-content/uploads/2011/07/IMG_1170.jpg"><img src="[domain]/wp-content/uploads/2011/07/IMG_1170-300x200.jpg" alt="" title="IMG_1170" width="300" height="200" class="alignnone size-medium wp-image-114" /></a>

出力ソースサンプル

<a href="http://www.example.com/wp-content/uploads/2011/07/IMG_1170.jpg"><img src="http://www.example.com/wp-content/uploads/2011/07/IMG_1170-300x200.jpg" alt="" title="IMG_1170" width="300" height="200" class="alignnone size-medium wp-image-114" /></a>

「WordPressで挿入する画像のsrcを相対リンクにする【発展版】」への2件のフィードバック

  1. 問題が解決できそうで助かりました。
    が、一点問題がありました。
    ソースをfunctions.phpに追記して、管理画面の画像挿入のための「メディアを追加」ボタンをクリックして表示される一覧を見ると、画像が全てリンクできていないようで(選択すると実際のページには反映されます)エラー画像がズラッと表示されます。
    その辺りの対処はその後されましたでしょうか。
    よろしければお手数ですが、ご教示いただけますと幸いです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です