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