WordPressでマルチサイトのドメインを変更する方法

change_table_data
Pocket

WordPressでマルチサイトを構築すると、親サイトのドメインを使って、子サイトのアドレスが決まります。私はサブドメイン型であるため、「[子サイト名].[親サイトドメイン]」となり、子サイトのアドレスに親サイトのドメインが含まる形となります。

しかし、マルチサイトを構築したあとに、「子サイトの名前に合わないから、親サイトのドメインを変更したいなぁ」と思うことはないでしょうか。

…私はありました。マルチサイトを構築する際、どういう子サイトを作るか決めておらず、いざ子サイトを作ってみると、子サイトの名前と親サイトのドメインが合わないと感じてしまいました。

では、どうするか。子サイトの名前を変えるか、親サイトのドメインを変えれば良いですね。そこで、今回はマルチサイト時の親サイトのドメイン変更方法を紹介します。

変更方法としては、事前に必要なツールを準備し、サーバ上のファイル変更およびデータベースのデータ変更を行います。なお、変更手順を間違えると、WordPressにアクセスできなくなる可能性もありますので、試す前にはデータベースのバックアップを取ることをオススメします。

スポンサーリンク

事前準備

作業を始める前に、データベースのバックアップやドメインを変更する際に使うツールをインストールします。ツールはドメインの変更を簡略化させるものであり、データベースのバックアップは万が一WordPressにアクセスできなくなった場合に復元させるためです。

wp-cliをインストール

wp-cliとは、WordPressをコマンドラインで管理できるツールです。WordPressのインストール、プラグイン・テーマのインストール、データベースのデータ置換など行うことができます。

公式サイトのインストール方法通りにインストールし、コマンドが使えるところまで確認します。

wp-cli.pharをダウンロード

curlを使って、「wp-cli.phar」をダウンロードします。

$ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

pharファイルの動作確認

phpコマンドで「wp-cli.phar」を実行できることを確認します。

$ php wp-cli.phar --info

実行権限の付与および、環境変数のPATHに追加されている場所へ移動

chmodコマンドで実行権限を付与し、mvコマンドでファイルを移動します。

$ chmod +x wp-cli.phar
$ sudo mv wp-cli.phar /usr/local/bin/wp

動作確認

wpコマンドとして、実行できることを確認します。PHP情報などが表示されれば、問題なく使えています。

$ wp --info
PHP binary:     /usr/bin/php-5.6
PHP version:    5.6.31
php.ini used:   /etc/php.ini
WP-CLI root dir:        phar://wp-cli.phar
WP-CLI packages dir:
WP-CLI global config:
WP-CLI project config:
WP-CLI version: 0.24.1

phpMyAdminをインストール

phpMyAdminとは、PHPで実装されたMySQLの管理ツールです。ブラウザからデータベースのデータの確認や変更ができるようになります。また、フリーのソフトウェアであるため、無償で使うことができます。MySQLを使う場合には、ぜひともインストールしておきたいツールです。

phpMyAdminをダウンロード

まずは、phpMyAdminをダウンロードしましょう。公式サイトを開き、右上の「Download」からダウンロードします。

phpmyadmin_download

phpMyAdminをWordPressと同じディレクトリに配置

次に、ダウンロードしたファイルを解凍します。その後、解凍したディレクトリをWordPressと同じディレクトリに配置します。

[root@exrecord wordpress]$ ll
total 212
-rw-r--r--  1 apache apache   418 Sep 25  2013 index.php
-rw-r--r--  1 apache apache 19935 Sep 27 06:47 license.txt
drwxr-xr-x 12 apache apache  4096 Mar  4  2017 phpmyadmin   # 解凍したphpmyadminのディレクトリを配置する
drwxr-xr-x  9 apache apache  4096 Aug 27  2016 plugins
-rw-r--r--  1 apache apache 10303 Sep 27 06:47 readme.html
drwxr-xr-x  8 apache apache  4096 Aug 28  2016 themes
-rw-r--r--  1 apache apache  5447 Dec 11  2016 wp-activate.php
drwxr-xr-x  9 apache apache  4096 Aug 17  2016 wp-admin
-rw-r--r--  1 apache apache   364 Dec 19  2015 wp-blog-header.php
-rw-r--r--  1 apache apache  1627 Dec 11  2016 wp-comments-post.php
-rw-rw-rw-  1 apache apache  4491 Oct  3 03:10 wp-config.php

phpMyAdminにログイン

それでは、phpMyAdminにログインできるか確認してみましょう。「http://[サーバのIPアドレス]/phpmyadmin/」にアクセスすると、phpMyAdminのトップページが表示されます。その後、MySQLのユーザ/パスワードを入力し、ログインできることを確認しましょう。

phpmyadmin_top_org

データベースをバックアップ

万が一WordPressにログインできなくなった場合のため、データベースのバックアップを取得します。バックアップの方法は色々ありますが、今回は先程インストールしたphpMyAdminを使って、バックアップをします。

WordPressのデータベースをバックアップ

まずは、先程ログインした画面上部にある「エクスポート」をクリックします。

phpmyadmin_top

続いて、「Export method」の項目で「詳細」にチェックを入れ、WordPressで使っているデータベース名を選択します。その他の設定はデフォルトのまま、「実行」をクリックします。これで、データベースのバックアップは完了です。

phpmyadmin_export

ただし、レンタルサーバーによっては、タイムアウト時間が設定されており、バックアップしたファイルのサイズが大きいと、インポート時にタイムアウトされてしまう可能性があります。参考サイトにサイズを軽減する方法がありますので、必要に応じてご参考ください。

旧ドメインを新ドメインに変更

事前準備が完了しましたら、旧ドメインを新ドメインに変更する作業をしていきます。データベースのデータ変更および、WordPressの構成ファイルを修正します。

wp-cliでドメインを変更

まずは、wp-cliを使ってドメインを変更します。「search-replace」オプションで文字列の置換ができますので、以下書式の通り、「旧ドメイン」「新ドメイン」「WordPressのディレクトリ」を指定して、変更していきます。

書式
wp search-replace '[旧ドメイン]' '[新ドメイン]' --path=[WordPressのディレクトリ] --skip-colum ns=guid
[ec2-user@exrecord wordpress]$ wp search-replace 'OLD_DOMAIN' 'NEW_DOMAIN' --path=/wordpress --skip-colum ns=guid
+------------------+-----------------------+--------------+------+
| Table            | Column                | Replacements | Type |
+------------------+-----------------------+--------------+------+
| wp_commentmeta   | meta_key              | 0            | SQL  |
| wp_commentmeta   | meta_value            | 0            | SQL  |
| wp_comments      | comment_author        | 0            | SQL  |
| wp_comments      | comment_author_email  | 0            | SQL  |
| wp_comments      | comment_author_url    | 0            | SQL  |
| wp_comments      | comment_author_IP     | 0            | SQL  |
| wp_comments      | comment_content       | 0            | SQL  |
| wp_comments      | comment_approved      | 0            | SQL  |
| wp_comments      | comment_agent         | 0            | SQL  |
| wp_comments      | comment_type          | 0            | SQL  |
| wp_links         | link_url              | 0            | SQL  |
| wp_links         | link_name             | 0            | SQL  |
| wp_links         | link_image            | 0            | SQL  |
| wp_links         | link_target           | 0            | SQL  |
| wp_links         | link_description      | 0            | SQL  |
| wp_links         | link_visible          | 0            | SQL  |
| wp_links         | link_rel              | 0            | SQL  |
| wp_links         | link_notes            | 0            | SQL  |
| wp_links         | link_rss              | 0            | SQL  |
| wp_options       | option_name           | 0            | SQL  |
| wp_options       | option_value          | 7            | PHP  |
| wp_options       | autoload              | 0            | SQL  |
| wp_postmeta      | meta_key              | 0            | SQL  |
| wp_postmeta      | meta_value            | 1            | PHP  |
| wp_posts         | post_content          | 0            | SQL  |
| wp_posts         | post_title            | 0            | SQL  |
| wp_posts         | post_excerpt          | 0            | SQL  |
| wp_posts         | post_status           | 0            | SQL  |
| wp_posts         | comment_status        | 0            | SQL  |
| wp_posts         | ping_status           | 0            | SQL  |
| wp_posts         | post_password         | 0            | SQL  |
| wp_posts         | post_name             | 0            | SQL  |
| wp_posts         | to_ping               | 0            | SQL  |
| wp_posts         | pinged                | 0            | SQL  |
| wp_posts         | post_content_filtered | 0            | SQL  |
| wp_posts         | post_type             | 0            | SQL  |
| wp_posts         | post_mime_type        | 0            | SQL  |
| wp_term_taxonomy | taxonomy              | 0            | SQL  |
| wp_term_taxonomy | description           | 0            | SQL  |
| wp_termmeta      | meta_key              | 0            | SQL  |
| wp_termmeta      | meta_value            | 0            | SQL  |
| wp_terms         | name                  | 0            | SQL  |
| wp_terms         | slug                  | 0            | SQL  |
| wp_usermeta      | meta_key              | 0            | SQL  |
| wp_usermeta      | meta_value            | 4            | PHP  |
| wp_users         | user_login            | 0            | SQL  |
| wp_users         | user_nicename         | 0            | SQL  |
| wp_users         | user_email            | 0            | SQL  |
| wp_users         | user_url              | 0            | SQL  |
| wp_users         | user_activation_key   | 0            | SQL  |
| wp_users         | display_name          | 0            | SQL  |
+------------------+-----------------------+--------------+------+
Success: Made 12 replacements.   # 12個文字列の置換に成功したという意味

トラブルシューティング

wp-cli実行時に以下のエラーが表示されることがあります。エラーが表示された場合は、エラー内容を確認し、当てはまる対処法を試してみてください。

Error: This does not seem to be a WordPress install.
Pass --path=`path/to/wordpress` or run `wp core download`.

→「WordPressがありません。」というエラーです。WordPressがあるディレクトリに移動してから、wp-cliを実行しましょう。

Error: YIKES! It looks like you're running this as root. You probably meant to run this as the user that your WordPress install exists under.

If you REALLY mean to run this as root, we won't stop you, but just bear in mind that any code on this site will then have full control of your server, making it quite DANGEROUS.

If you'd like to continue as root, please run this again, adding this flag:  --allow-root

If you'd like to run it as the user that this site is under, you can run the following to become the respective user:

    sudo -u USER -i -- wp 

→rootユーザでは実行できないというエラーです。rootユーザで実行する場合は、「--allow-root」のオプションを付けましょう。

phpMyAdminでドメインを変更

wp-cliで複数のテーブルのデータを置換しましたが、まだ一部のテーブルのデータを変更する必要があります。そのため、以下テーブルのデータをphpMyAdminで変えていきます。

  • wp_site
  • wp_sitemeta
  • wp_blogs

phpMyAdminにログインし、左側のデータベース名から、WordPressで使っているデータベースを選択します。その後、対象の各テーブルを選択し、テーブルのデータを新ドメインに変更します。

change_table_data

wp-config.phpの「DOMAIN_CURRENT_SITE」を修正

ここまでの作業で、データベースのデータ変更は完了です。続いて、マルチサイト時に設定した「DOMAIN_CURRENT_SITE」を修正します。

/** サイトネットワーク定義 */
~~~
define('SUBDOMAIN_INSTALL', true);
define('DOMAIN_CURRENT_SITE', 'NEW_DOMAIN');  # 新ドメインに変更する
define('PATH_CURRENT_SITE', '/');
~~~

修正が終わりましたら、新ドメインにアクセスし、アクセスできることを確認しましょう。アクセスできなかった場合は、旧ドメインの箇所がまだ残っていたり、別な箇所を変更してしまった可能性があります。もし、復旧できない場合は、バックアップしたデータベースの復元を検討しましょう。

スポンサーリンク

feedly、RSSをフォローする