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 のコメント欄を参考にしてください。
ピンバック: 第3.5.1回 WordBench Fukuokaに参加しました!参加レポート! | WebCake
ピンバック: WordPressを新しいサイトに引っ越しするときのURL変換ツール | イシダのメモ
ピンバック: WordPressのDB移行メモ | 自然体
ピンバック: WordPressでの独自ドメイン移行時に、phpMyAdminで書くべきSQL文 | 株式会社コミュニティコム