WordPressをお客様に納品する場合など、最初に仮ドメインで設置をして、公開のタイミングで本ドメインに切り替えるという作業をよく行います。
それ以外にも、WordPressが動いているサーバーのドメインを変更しなくてはならなかったり、ステージングサーバーから公開サーバーにデータコピーをしたりと、WordPressを移設して動かすタイミングって、割と多かったりします。
移設の問題点
移設を行う場合の一番の問題点は、公開URLが変更になることです。
- テーマファイルのCSSやJavaScriptが読み込まれないためデザインが崩れる
- 公開URLが正しくないとWordPressの管理画面にログインができない
- 記事中に設定したリンクや、メディア(画像やファイル)が全てリンクが切れてしまう
1. 2. については公開URLの設定さえ元に変更してしまえば問題無いのですが、一番の問題は 3. で、記事中に設定した内部リンクやら、画像やら添付ファイルやらが全てリンク切れを起こしてしまうことです。
Search Regexという正規表現などで記事を検索してURLを置換できるツールなどが、まず考えつく1つの方法です。
- WordPress › Search Regex « WordPress Plugins
- 【WordPress】全記事から検索して一括置換出来るプラグイン「Search Regex」が素晴らしい | nori510.com
しかしこのSearch Regexは、通常の投稿や固定ページの内容は置換できますが、カスタム投稿は検索できません。(カスタマイズすれば可能ですが)
またなにより大きな問題として、このプラグインではカスタムフィールドに入力された内容は対象外となってしまうため、カスタムフィールドに画像のURLや記事のURLなどが入っている場合、こちらを修正することができません。
カスタムフィールドの問題
そのため、カスタムフィールドの値を一気に書き換える場合には、DBから直接UPDATEクエリなどを使って修正するしかなくなりますが、この方法にもまた問題があります。
WordPressのカスタムフィールドには、PHPのシリアライズされたデータが格納されていることがあるからです。
シリアライズされたデータというのは、下記のようなテキストデータです。
これはPHPの配列やオブジェクトなどを文字列に変換したもので、PHPのunserialie関数を通すことで元の配列などに戻すことが可能です。
a:2:{i:2;a:4:{s:5:"title";s:0:"";s:5:"count";i:0;s:12:"hierarchical";i:0;s:8:"dropdown";i:0;}s:12:"_multiwidget";i:1;}
このシリアライズされた文字列には、元の配列やオブジェクトの中のデータ形式や、格納されているテキストの長さなども保持されていて、単純に中のテキストを置換したりしてしまうと、テキストの長さが保持されているデータと合わなくなってしまい、データが復元できなくなってしまいます。
そのため、UPDATEクエリを使って一気に直すことができません。
全て解決!便利なPHPスクリプト
そこで活躍するのが下記で公開されている SEARCH REPLACE DB というスクリプト。
海外の方が開発されCODEXにも記載されている非常に有用なスクリプトで、シリアライズされたデータも含めて、DBにあるレコードから特定の文字列を一気に置換することが可能になります!
まずはダウンロード
下記のリンクをクリックしてファイルを保存してください。
解凍したファイルをWordPressと同ディレクトリにアップ
解凍して出てきた searchreplacedb2.php を、WordPressのwp-config.phpが存在するディレクトリにアップします。
ファイルにアクセス
下記のような画面が表示されればOKです。
Submitをクリックして次に進んでください。
DBへの接続情報を確認
wp-config.php と同じディレクトリにアップされていれば、自動的にwp-config.phpに存在するDB情報を読み取って表示してくれます。
Submitをクリックして次に進んでください。
書き換えたいテーブルを選択
書き換えたい文字列があるテーブルを選択します。
最低限、投稿本体が格納されている posts およびにカスタムフィールドの格納されている postmeta、設定値が格納されている options は選択しましょう。
その他のテーブルについては、必要に応じて選択してください。
ユーザーのプロフィールなどにも書き換えたい文字列が存在するようならば、usermeta なども選択する必要があるでしょう。
検索する文字列と置換する文字列を入力
検索する文字列、すなわち書き換え元となる文字列と、置換する文字列を入力します。
WordPressを移設した場合は、以前に設置してあったURLを検索する文字列に、新しく設置した先を置換する文字列に指定します。
例えば http://example.com/blog/wp
に設置してあったWordPressを http://hogehoge.com/wp
に移設した場合は、下記のように記述してください。
- 検索する文字列
example.com/blog/wp/
- 置換する文字列
hogehoge.com/wp/
ポイントは http://
を抜くことです。
これはデータベースの中に http://
を抜いたドメインの状態で保存されているレコードがあるため、一部書き換わらないレコードが出てきてしまうためです。
入力が終わったらSubmitをクリックしましょう。
置換完了
めでたく置換が完了しました。
総計で何レコードが書き換えられたかなどがレポートされます。
最後にファイルを削除
置換が正しく完了したら、設置した searchreplacedb2.php
は必ず削除してください。
放置しておくとパスワード認証も何も無くデータベースを書き換えられてしまうため、非常に危険です。
たったこれだけ
たったこれだけのステップで、面倒なURLの置換作業が全て完了します。
慣れればFTPからアップして5分もかからず作業を終えることができるでしょう。
1点注意として、データベースを書き換える作業になるため、作業前には必ずデータベースのバックアップをとった上で作業をしてください。
置換するテキストなどが間違えていた場合に、取り返しのつかないことになる場合があります。
WordPressの移設はとても手間だと悩んでいた方、是非お試しください。