WordPress 投稿本文のドメイン付き絶対URL問題を解決してスムーズな環境移行を実現する方法

WordPress 10大なんでやねんの筆頭に挙げられる、投稿本文へのドメイン付き絶対 URL 直書き仕様。記事へのリンクが簡単挿入!となったときに少し期待しましたが、直書きのパターンが増えただけでした。。
このなんでやねんに関しては ジムさんが WordPressで挿入する画像のsrcを相対リンクにするWordPressで挿入する画像のsrcを相対リンクにする【発展版】 の記事をしたためていらっしゃいます。したためてって「認めて」って書くんですね、勉強になりました!
今回はジムさんに似た方法で、テスト環境から本番環境への移行も、ドメイン変更もへっちゃら!涼しい顔でラクラクこなせる驚きの方法をお届けします。

ショートコードに置き換えます。

やってることは Simple Colors さんと同じです。あ、でもパクリちゃいますよ。WordPress なんつー超メジャーなパブリッシングプラットホームじゃぁ大抵のことは既に誰かがやっています。検索したら類似記事があったけど、せっかくなので記事書こう、みたいな Web あるあるです。記事を書くからには人として知ってて丸無視はできませんので、先達に敬意を表することがオープンソースに生きる我ら Web クリエイターとしての礼儀ってもんです。

知り合いのマイナー(失礼な)ブログでなるほど記事を読んだしばらく後に、メジャーなブログで同じような記事を見かけたら残念な気持ちになりますよね。それが続くと なんやろこれ ってなりますよね。え、ならない?なりませんか!わぉ。

コード

テーマフォルダの functions.php に以下のコードを貼り付ければ OK です。

// [my_home_url] ショートコードを定義します。
add_shortcode( 'my_home_url', 'my_home_url' );
function my_home_url( $atts ) {
    return home_url();
}

// 投稿保存時に、本文内のドメイン付き絶対URL部分を [my_home_url] に置換します。
add_filter( 'wp_insert_post_data', 'my_insert_post_data', 10, 2 );		
function my_insert_post_data( $data, $postarr ) {
    $data['post_content'] = preg_replace( 
        '/'.preg_quote( home_url(), '/' ).'/', 
        '[my_home_url]', 
        $data['post_content'] 
    );
    return $data;	
}

// 管理画面での投稿編集時に  [my_home_url] をドメイン付き絶対URL に戻します。
add_filter( 'the_editor_content' , 'my_the_editor_content' );			
function my_the_editor_content( $content ) {
    return preg_replace( 
        '/'.preg_quote( '[my_home_url]' ).'/', 
        home_url(), 
        $content 
    );	
}

仕組み

  1. 投稿の保存時に、本文内で 管理画面の[設定|一般]の[サイトアドレス (URL)]に相当する部分 をショートコード [my_home_url] に置換します。
  2. ショートコードなので、本文の取得&表示時に 'the_content' フィルタを apply_filters() されると [my_home_url] がサイトアドレスに置換されます。
  3. 投稿編集時は 'the_editor_content' フィルタで同上です。

これで画像のパスも別投稿へのリンクも、投稿本文中にあるドメイン付き絶対URL はひととおりヨキに計らってくれます。WordPress をインストールしたディレクトリとは別のディレクトリにサイトのホームページを設定したりしなかったりしても大丈夫です。また、クライアントがショートコードを目にすることもないので、何かと安心です。

ところでセキュアな URI スキームの場合はどうするんだい?と上司がイジワル言ってくるかもしれないので、その辺りは ジムさんのブログ を参考にご自身でチャレンジしてみてください。

追記
この方法はコンテンツを仕込む前に施しておく必要があります。既に記事を書きまくってしまった方は、ヲカモトさんのWordPress でドメイン移行したとき全URLを手っ取り早く変えるを参考にチェンジにチャレンジしてみてください。

動作確認バージョン
  • WordPress 3.3.1

21 Comments

  • 【ブログ書いた】環境移行・ドメイン変更に耐えるサイト作り http://t.co/vdEgmBRG

  • なんだよ、このページのツイートボタンからツイートできないじゃないか(プンプン RT @kzxtreme 【ブログ書いた】環境移行・ドメイン変更に耐えるサイト作り http://t.co/tV0liRTb

  • WordPress 投稿本文のドメイン付き絶対URL問題を解決してスムーズな環境移行を実現する方法

  • テスト環境から本番環境移行がスムーズにできる。
    WPがURL挿入時にドメイン付けちゃうからですね。 http://t.co/pYNPYjXq

  • 【お昼の再掲】環境移行・ドメイン変更に耐えるサイト作り http://t.co/vdEgmBRG #wordpressjp @wordpress_fan

  • “WordPress 投稿本文のドメイン付き絶対URL問題を解決してスムーズな環境移行を実現する方法  |  wpxtreme” http://t.co/JQNZJJM0

  • @takerui: “WordPress 投稿本文のドメイン付き絶対URL問題を解決してスムーズな環境移行を実現する方法  |  wpxtreme” http://t.co/JQNZJJM0

  • WordPress 投稿本文のドメイン付き絶対URL問題を解決してスムーズな環境移行を実現する方法  |  wpxtreme ショートコードに置き換えます。 やってることは Simple Colors さんと同じです。あ、でもパ… http://t.co/LK04VvrB

  • 【お昼の再掲】環境移行・ドメイン変更に耐えるサイト作り http://t.co/vdEgmBRG #wordpressjp @wordpress_fan

  • WordPress 投稿本文のドメイン付き絶対URL問題を解決してスムーズな環境移行を実現する方法
    http://t.co/cxra0J1F

  • なるほど。: WordPress 投稿本文のドメイン付き絶対URL問題を解決してスムーズな環境移行を実現する方法 http://t.co/hSL0wGfJ @kzxtremeさんから

  • WordPress 投稿本文のドメイン付き絶対URL問題を解決してスムーズな環境移行を実現する方法 http://t.co/lwHvLcah @kzxtremeさんから

  • 環境移行はgerp痴漢でいいやと思ってたけど、過去何度も痴漢未遂した僕には必要な護身術かもしれない。→WordPress 投稿本文のドメイン付き絶対URL問題を解決してスムーズな環境移行を実現する方法 http://t.co/AtZIAtkv

  • 「WordPress 10大なんでやねん」をぜひ伺いたいっす。 WordPress 投稿本文のドメイン付き絶対URL問題を解決してスムーズな環境移行を実現する方法  |  wpxtreme http://t.co/eIu48N0a

  • ショートコードの使い方が超オシャレです|WordPress 投稿本文のドメイン付き絶対URL問題を解決してスムーズな環境移行を実現する方法 http://t.co/m2Dwilk9 via @kzxtreme

  • ショートコードの使い方が超オシャレです|WordPress 投稿本文のドメイン付き絶対URL問題を解決してスムーズな環境移行を実現する方法 http://t.co/m2Dwilk9 via @kzxtreme

  • これ超すてきやわ。  WordPress 投稿本文のドメイン付き絶対URL問題を解決してスムーズな環境移行を実現する方法 http://t.co/qj0MqRxq @kzxtremeさんから

  • ショートコードの使い方が超オシャレです|WordPress 投稿本文のドメイン付き絶対URL問題を解決してスムーズな環境移行を実現する方法 http://t.co/m2Dwilk9 via @kzxtreme

  • ショートコードの使い方が超オシャレです|WordPress 投稿本文のドメイン付き絶対URL問題を解決してスムーズな環境移行を実現する方法 http://t.co/m2Dwilk9 via @kzxtreme

  • WordPress 投稿本文のドメイン付き絶対URL問題を解決してスムーズな環境移行を実現する方法  |  wpxtreme http://t.co/jxgpZnDd

  • “WordPress 投稿本文のドメイン付き絶対URL問題を解決してスムーズな環境移行を実現する方法  |  wpxtreme” http://t.co/nfwVOaSg