WordPress のDB上のサイトURLを一気に変換

WordPress を、別サーバに移行するにあたってサイト URL を変更したい時があります。
例えば、開発環境から本番環境に移行する時とか

そんな時は、以下の SQL 文を発行することで wp_posts 内のデータを一発で置換できます。

UPDATE `wp_posts`
 SET post_content=REPLACE(post_content, "{旧URL}", "{新URL}")
 where post_content like "%{旧URL}%";

ただ wp_options とか wp_postmeta とかにはシリアライズされたデータが入っていることもあるので、これらはそのまま置換するとまずいです。
(シリアライズデータの中には、文字列の長さとかも含まれてるので)
そこで、シリアライズされたデータは一度アンシリアライズしてから置換して、シリアライズした後に DB に書き戻してやる必要があります。
ただ、手作業でこれやってるとかったるいので、それらを自動で行う PHP スクリプトを作りました。
https://gist.github.com/3627972
上記の gist から download するなり raw データを取得するなりして、PHP スクリプトを取得してください。
以下、使い方

まずは、通常通り MySQL のデータを新サーバにインポートします。

その後、新サーバで以下のコマンドを実行してください。

$ php replace-siteurl.php {新URL} /path/to/wordpress

新URL は新しいサイトの URL、/path/to/wordpress は WordPress のソースを展開しているディレクトリへのパスです。

これで、以下のことをやってくれます。

  • 旧サイトの URL を home_url() から取得
  • wp_posts の post_content 内の旧サイトURLを新サイトURLに置換
  • wp_options の option_value から旧サイトURLが含まれているデータを取得して、新サイトURLに置換
  • wp_postmeta の meta_value から旧サイトURLが含まれているデータを取得して、新サイトURLに置換
  • wp_usermeta の meta_value から旧サイトURLが含まれているデータを取得して、新サイトURLに置換
  • wp_commentmeta の meta_value から旧サイトURLが含まれているデータを取得して、新サイトURLに置換

導入されているプラグインによっては、正常に動作しないことがあるかもしれません。
その辺は、memo.dogmap.jp のコメント欄を参考にしてください。

WordPress のDB上のサイトURLを一気に変換」への4件のフィードバック

  1. ピンバック: 第3.5.1回 WordBench Fukuokaに参加しました!参加レポート! | WebCake

  2. ピンバック: WordPressを新しいサイトに引っ越しするときのURL変換ツール | イシダのメモ

  3. ピンバック: WordPressのDB移行メモ | 自然体

  4. ピンバック: WordPressでの独自ドメイン移行時に、phpMyAdminで書くべきSQL文 | 株式会社コミュニティコム

コメントを残す

メールアドレスが公開されることはありません。