マルチサイトを利用している場合のローカル環境からのサーバー移行手順のメモ。
データベース名、ユーザー名、ディレクトリ構成は同じにしておくと作業は楽になる。以下ではローカル環境で /wp 以下にインストールしたものをサーバーでは、ルートにインストールする例を説明しているが、本来なら、ローカル環境ではサブドメインを利用してサーバー環境に合わせて作成するほうがはるかに簡単。
以下は「XAMPP 1.8.1 」の phpMyAdmin を使用する例。
参考サイト:Codex日本語
追加情報 2015.2.23
データベース内で保存されている内容がシリアライズされている可能性があるので(プラグイン等)、単にテキストエディタを使って一括置換では、うまくいかない場合もあるらしい。以下参照。
WordPressの引っ越しに便利な wp search-replace(Gatespace)
以下はローカル環境では「http://localhost/wp」にルートサイトをインストールし、その下に「http://localhost/wp/en」と「http://localhost/wp/jp」というサイトをインストールしてある場合の、URL が関係する一部のデータベースのテーブルの値。
xxxx_blogs テーブル blog_id:1 site_id:1 domain: localhost path: /wp/ blog_id:2 site_id:1 domain: localhost path: /wp/en/ blog_id:3 site_id:1 domain: localhost path: /wp/jp/ xxxx_options テーブル siteurl: http://localhost/wp xxxx_2_options テーブル siteurl: http://localhost/wp/en xxxx_3_options テーブル siteurl: http://localhost/wp/jp xxxx_site テーブル id: 1 domain: localhost path: /wp/ xxxx_users テーブル user login: xxx01
以下は試験的にサーバー側に、WordPressをインストールし、マルチサイト化して、サイトは追加していない状態でのデータベースのテーブルの値。(移行に際して、サーバー側に WordPress をインストールする必要はない。最初はうまくいかなかったので、原因を調べるためにインストールしたもの。)
ローカル環境では、サブディレクトリにインストールしてあるが、サーバーではルートディレクトリにインストールする場合の例。
xxxx_blogs テーブル domain: www.mysite.com path: / xxxx_options テーブル siteurl: http://www.mysite.com xxxx_site テーブル domain: www.mysite.com path: / xxxx_users テーブル user login: xxx01
両方を見比べると、
「localhost」の部分を 「www.mysite.com」 に置換
「/wp」の部分を 「”」(空)に置換
すればよいことがわかる。
「xxxx_blogs」テーブルや「xxxx_site」テーブルの「domain」の値には「http://」は含まれていないので、置換の際には「http://」の部分は含めないほうがよいと思う。
また、もしかしたらユーザー名(管理者名)も置換が必要になるかも知れない。今回は同じユーザー名にしたので必要はなかった。
うまくいかない場合は、上記のテーブルの値を確認してみるのも1つの方法。
ローカル環境のファイルを全て、サーバーにアップロードする。
/** WordPress のためのデータベース名 */ define('DB_NAME', '新しいデータベース名'); /** MySQL データベースのユーザー名 */ define('DB_USER', '新しいユーザー名'); /** MySQL データベースのパスワード */ define('DB_PASSWORD', '新しいパスワード'); /** MySQL のホスト名 */ define('DB_HOST', '新しいホスト名');
define('WP_ALLOW_MULTISITE', true); define('MULTISITE', true); define('SUBDOMAIN_INSTALL', false); define('DOMAIN_CURRENT_SITE', 'www.mysite.com');//上記の例ではローカル環境では「'localhost'」となっていた define('PATH_CURRENT_SITE', '/');//上記の例ではローカル環境では「'/wp/'」となっていた define('SITE_ID_CURRENT_SITE', 1); define('BLOG_ID_CURRENT_SITE', 1);
インストールするディレクトリ構成が異なっていれば、.htaccess の修正も必要になる。
上記(前述)の例の場合だと、ローカル環境では「wp」というディレクトリにインストールされていて、サーバーではルートにインストールするので、「RewriteBase」の値を「RewriteBase /wp/」から「RewriteBase /」に変更する。
RewriteEngine On RewriteBase / #「RewriteBase /wp/」から「RewriteBase /」に変更 RewriteRule ^index\.php$ - [L] # add a trailing slash to /wp-admin RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L] RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L] RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L] RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L] RewriteRule . index.php [L]
データベースをインポートしても「設定」などの項目の中には、変更が必要なものもある。
プラグインの中には、再インストールする必要があるものもあるかもしれない。コンタクトフォームなどはローカル環境で設定したものは、うまく機能しない可能性がある。うまく機能しない場合は再インストールするなどしてみるのも1つの方法。