WordPressサイトの移転には、エクスポート・インポート機能を使う事ができます。しかしこの機能で対応できるのは記事とメディアのみです。WordPress設定や「リンク」、プラグインの設定などは移行する事ができないので、移転元のサイトを見ながら一つずつ設定しなくてはならず、サイトによっては大きな労力になり、また移行に漏れが生じる恐れがあります。
そこで、WordPressのエクスポート・インポート機能に頼らず、記事から設定までまるごと移行する方法を試してみました。
マルチサイトについて
以下の方法はWordPressのマルチサイトにも対応していますが、このような条件で行っています。
- マルチサイトはサブディレクトリ方式です。
- 移転元も移転先も同じサブディレクトリ名で移行します。
必要なもの
移転作業で必要な物をまとめてみました。
- 移転元サイト(当たり前ですが)
- 移転先になるサーバとデータベース(これも当たり前ですね)
- phpMyAdmin(データの移行に使用するので、移転元、移転先ともに使える必要があります)
- Search Replace DB(これは後でダウンロードします)
- 時間的な余裕(ファイルのダウンロードとアップロードに、結構な時間を要するかもしれません)
1. 移転元サイトへのアクセスを遮断
移転元サイトの.htaccessファイルに設定を追加して、自分のIPアドレス以外からのアクセスを遮断します。
1 2 3 |
order deny,allow deny from all allow from 自分のIPアドレス |
2. 移転元サイトのプラグインを全て停止、テーマを標準の物にする
移転元サイトのプラグインを全て停止にします。
停止にする際に、どのプラグインが有効化されていたかを控えておきましょう。
移転元サイトのテーマは、「Twenty Fourteen」などWordPress標準のテーマに変更しておきます。
3. phpMyAdminで移転元サイトのデータをエクスポート
移転元のphpMyAdminにアクセスし、データをエクスポートします。
まず、左カラムのデータベースリストの、移転元サイトのデータベース名をクリックします。
エクスポートタブをクリックし、エクスポート方法の詳細をクリックします。
テーブルは全選択します。
生成オプションのCREATE DATABASE / USE コマンドを追加するにチェックを入れます。
一番下の実行ボタンをクリックし、エクスポートファイルをダウンロードします。
4. 移転元サイトのファイルをダウンロードする
移転元サイトのサーバ上のファイルを、全てダウンロードして、一つのフォルダに保存しておきます。
※Macをお使いの場合、.htaccessファイルはMac上で不可視ファイルになってしまうので、あらかじめファイル名先頭のドットを消去したコピーファイルを用意しておくなどしておきましょう。
これで、移転元サイト側の作業は完了です。
5. phpMyAdminで移転先サイトにデータをインポート
ここからは移転先サイト側の作業になります。
まず、移転先のphpMyAdminを開き、先ほどエクスポートしたデータファイルをインポートします。
インポートの際にデータベースが作成されるので、予めデータベースを作成しておく必要はありません。
まず、インポートタブをクリックし、インポートするファイルからエクスポートデータのアップロード方法を選びます。
ブラウザからアップロードする場合は、ファイルを選択からPC上にあるエクスポートデータを選択します。
一番下の実行ボタンをクリックし、データをインポートします。
6. 移転先サーバにファイルをアップロードする
4. 移転元サイトのファイルをダウンロードするでダウンロードしたファイルを、移転先サーバのWordPressを設置するディレクトリにアップロードします。
7. .htaccessファイルを書き換える
移転先のURLに合わせて、.htaccessファイルを書き換えます。
1 2 3 4 5 6 7 8 9 10 11 |
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress |
RewriteBaseのところと、RewirteRuleの最後の行を書き換えます。
RewriteBaseは、移転後のホームURLの、ドメイン以降の部分にします。
例えば、http://new-site.com/shop/が移転後のホームURLになる場合、
1 |
RewriteBase /shop/ |
となります。
ドメイン直下がホームになる場合は、
1 |
RewriteBase / |
となります。
RewriteRuleの最後の行は、RewiteBaseにindex.phpを加えたものになります。
http://new-site.com/shop/の場合は、
1 |
RewriteRule . /shop/index.php [L] |
のようになります。
マルチサイトの場合は、メインサイトのホームURLを基準にします。
8. wp-config.phpを書き換える
移転先のwp-config.phpファイルを書き換えます。
1 2 3 4 5 6 7 8 9 10 11 12 |
// ** MySQL 設定 - この情報はホスティング先から入手してください。 ** // /** WordPress のためのデータベース名 */ define('DB_NAME', 'my_site'); /** MySQL データベースのユーザー名 */ define('DB_USER', 'username'); /** MySQL データベースのパスワード */ define('DB_PASSWORD', 'password'); /** MySQL のホスト名 */ define('DB_HOST', 'localhost'); |
ユーザー名、パスワード、ホスト名を、移転先環境に合わせて書き換えます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/**#@+ * 認証用ユニークキー * * それぞれを異なるユニーク (一意) な文字列に変更してください。 * {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org の秘密鍵サービス} で自動生成することもできます。 * 後でいつでも変更して、既存のすべての cookie を無効にできます。これにより、すべてのユーザーを強制的に再ログインさせることになります。 * * @since 2.6.0 */ define('AUTH_KEY', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); define('SECURE_AUTH_KEY', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); define('LOGGED_IN_KEY', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); define('NONCE_KEY', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); define('AUTH_SALT', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); define('SECURE_AUTH_SALT', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); define('LOGGED_IN_SALT', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); define('NONCE_SALT', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); |
saltも新しい物を生成して書き換えます。
マルチサイトの場合は、マルチサイト設定の部分も書き換えます。
1 2 3 4 5 6 7 8 9 |
define ('WP_ALLOW_MULTISITE', true); define( 'MULTISITE', true ); define( 'SUBDOMAIN_INSTALL', false ); $base = '/shop/'; define( 'DOMAIN_CURRENT_SITE', 'new-site.com' ); define( 'PATH_CURRENT_SITE', '/shop/' ); define( 'SITE_ID_CURRENT_SITE', 1 ); define( 'BLOG_ID_CURRENT_SITE', 1 ); |
$base
とPATH_CURRENT_SITE
には、ホームURLのドメイン以降の部分を記述します。
DOMAIN_CURRENT_SITE
には、ドメインのhttp://以降の部分を記述します。
9. データベースのサイトURLを書き換える
移転先のデータベースにインポートしたデータに含まれるURLを、旧URLから新URLに書き換えます。
データは通常の文字列データ以外にも、シリアライズされたデータを含んでいるため、単純な文字列置換では対応できません。
そこで、Search Replace DBというPHPスクリプトを使用します。
Search Replace DBをサーバに設置する
まず、Search Replace DBのサイトにアクセスします。
https://interconnectit.com/products/search-and-replace-for-wordpress-databases/
バージョン3.0.0 BETAは、環境によって文字化けが発生したので、今回はバージョン2.1.0をダウンロードします。
ダウンロードしたzipファイルを解凍すると、searchreplacedb2.phpというファイルが展開されます。
セキュリティのために、このファイル名をランダムなものにリネームします。(拡張子は残します。)
リネームしたファイルを、サーバのWordPressサイトのルートディレクトリにアップロードします。
データベース内のURLを置換する
ブラウザで、移転先サイトのURL + 先ほど設置したPHPファイル名へアクセスします。
submitをクリックします。
各項目は自動的に埋まっているので、正しいかを確認してSubmit DB detailsをクリック。
Tablesで全てのテーブルを選択し、Continueをクリックします。
確認ダイアログが表示されるので、OKをクリックして続けます。
Search forには、移転元サイトのホームURLを入力します。
Replace withには、移転先サイトのホームURLを入力します。
どちらも、末尾のスラッシュは入れません。
正しく入力したか、もう一度確認して、Submit Search stringをクリックします。
確認ダイアログが表示されるので、OKをクリックして続けます。
置換が完了です。
先ほど設置したPHPファイルはもう必要ありません。セキュリティ上のリスクが大きいので、すぐに削除しておきましょう。
10. データベースのドメインとパスを書き換える(マルチサイトのみ)
マルチサイトの場合、さらにドメインとパスの書き換えが必要です。
こちらはphpMyAdminで行います。
まず、phpMyAdminで移転先サイトのwp_siteテーブルを開きます。
こちらはメインサイトのドメイン・パスになります。
編集ボタンをクリックし、ドメインとパスを書き換えます。
ドメインはhttp://以降、パスはスラッシュで始まりスラッシュで終わります。
以上のように書き換えます。
次に、wp_blogsテーブルを開きます。
こちらはメインサイトとサブサイト全ての情報です。
先ほどと同様に、ドメインとパスを全て書き換えます。
このように書き換えたら完了です。
11. プラグインとテーマを元に戻して完了!
ここまででほぼ完了です。
移転先サイトのログインURLにアクセスしてみてください。
アクセスして無事にログインできれば、あとはダッシュボードからテーマファイルを元のものに戻し、必要なプラグインを有効化しましょう。
あとはホームページを開き、サイト内を一巡して問題なければ完了です。
お疲れさまでした〜
成功のあかつきにはバックアップもね!
ここから新天地でのサイト運営が始まります。
バックアップを忘れずに取っておきましょう。
TRACKBACKS