私たちはWordPress Multisite環境でいくつかのサブドメインサイトを運営していて、プライマリサイトをルートからサブドメインに切り替えたいと思っています。
現在のサイトはexample.com
でID 1
です(フィールドが設定され編集不可のため名前を変更できません)
新しいサイトはnew.example.com
付きのID 15
です(example.com
に名前を変更しようとしました)
私は、サイトの名前を変更し、wp-config.php
とSITE_ID_CURRENT_SITE
の新しいID 15を指定するためにBlog_ID_CURRENT_SITE
ファイルを更新することを含む切り替えのためのいくつかの指示に従いました。その結果、メインサイトは変更されず、管理者は気を狂わせました。
投稿/ページやプラグインをインポートせずにメインサイトを切り替えてサブドメインサイトのコンテンツに置き換える簡単な方法はありますか?
更新:
これらのヒントを与えてくれてありがとう。私がデータベースを見て、読んで、そしてあなたから得たものとの私の結論は、メインサイトを置き換えるための新しいサブドメインサイトは1のベーステーブル名とID、更新されたパスなどを持つ必要があるということです。これらを切り替えた後、ネットワーク管理者には問題があるでしょう - そのため、基本テーブル(wp_optionsなど)を同等のもの(wp_x_optionsなど)と比較して、それらの基本テーブルにネットワーク管理に関連する固有のものがないか確認します。
4歳で答えがない?だからここに行きます… -
例として、次のネットワーク設定を取り上げましょう(私はWP-CLIの site listコマンド を使用しています)。
$ wp site list
+---------+--------------------+---------------------+---------------------+
| blog_id | url | last_updated | registered |
+---------+--------------------+---------------------+---------------------+
| 1 | http://wp.tmp/ | 2016-08-04 08:39:35 | 2016-07-22 09:25:42 |
| 2 | http://foo.wp.tmp/ | 2016-07-22 09:28:16 | 2016-07-22 09:28:16 |
+---------+--------------------+---------------------+---------------------+
ネットワークサイトリストは次のようになります。
URLが2
の新しいルートサイトとして、IDがhttp://wp.tmp/
のサイトを使用します。これは実際には質問で説明されているのと同じ問題で、IDとURLに他の値がいくつかあります。
wp-config.php
のマルチサイト関連部分は、おそらく以下のようになります。
const MULTISITE = TRUE;
const DOMAIN_CURRENT_SITE = 'wp.tmp';
const PATH_CURRENT_SITE = '/';
const SITE_ID_CURRENT_SITE = 1;
const BLOG_ID_CURRENT_SITE = 1;
const SUBDOMAIN_INSTALL = TRUE;
WordPressはテーブルwp_*_option
とwp_blogs
を使用して、指定されたリクエストURLに一致するブログを見つけ、このブログの適切なパーマリンクを作成します。したがって、次の3つの表の値を変更する必要があります(この例の場合)。
wp_options
では、キーhome
とsiteurl
wp_2_options
では、キーhome
とsiteurl
(あなたの場合、これはwp_15_options
になります)wp_blogs
では、IDが1
および2
(それぞれ15
)の両方のサイトの列domain
私はこれにはAdminerを使用していますが、他のDB管理ツール(PhpMyAdmin)も同様に機能します。 (スクリーンショットはドイツ語のGUIを示していますが、その考えは明らかであると思います。)
wp_options
(サイトID 1
のオプション表)で、キーhome
とsiteurl
の両方の値をhttp://wp.tmp
からhttp://foo.tmp
に変更します。 (上のスクリーンショットは更新前の状態を示しています。)
テーブルwp_2_options
についてもまったく同じですが、ここでは値をhttp://foo.wp.tmp
からhttp://wp.tmp
に変更します。
次のステップは、テーブルwp_blogs
を更新することです。
(この場合も、スクリーンショットには変更を加える前の表が表示されています。)ここでは、両方のサイトからdomain
列で値を切り替えるだけです。
wp.tmp
はfoo.wp.tmp
になり、foo.wp.tmp
はwp.tmp
になりますこれで、新しい設定データを正しく処理するためにwp-config.php
を更新する必要があります。
const MULTISITE = TRUE;
const DOMAIN_CURRENT_SITE = 'wp.tmp';
const PATH_CURRENT_SITE = '/';
const SITE_ID_CURRENT_SITE = 1;
const BLOG_ID_CURRENT_SITE = 2; // This is the new root site ID
const SUBDOMAIN_INSTALL = TRUE;
この時点で、WordPressマルチサイトは機能していますが、新しいルートサイトがあります。
$ wp site list
+---------+--------------------+---------------------+---------------------+
| blog_id | url | last_updated | registered |
+---------+--------------------+---------------------+---------------------+
| 1 | http://foo.wp.tmp/ | 2016-08-04 08:39:35 | 2016-07-22 09:25:42 |
| 2 | http://wp.tmp/ | 2016-07-22 09:28:16 | 2016-07-22 09:28:16 |
+---------+--------------------+---------------------+---------------------+
覚えておいてください:このプロセスの間、あなたのサイトは利用できず、リクエストはいくつかの厄介なエラーで終わるでしょう。あなたのWordPressインストールの前に503 Service Unavailable
レスポンスを手配したいかもしれません。これは .htaccess
を使って行うことができます。
今トリッキーな部分が来ます。現時点では、 コンテンツテーブル 内のすべてのURLはまだ古いサイトのリソースを参照しています。最初のステップですべてのhttp://foo.wp.tmp
をhttp://wp.tmp
に置き換え、次のステップですべてのhttp://wp.tmp
をhttp://foo.wp.tmp
に置き換えることは、サイトID 1(http://foo.wp.tmp
)を指すすべての以前のURLを持つことになります。
最善の方法は、中間ステップを挿入することです。
http://foo.wp.tmp
を検索し、できれば一意のスラッグに置き換えます。http://3a4b522a.wp.tmp
http://wp.tmp
を検索し、http://foo.wp.tmp
に置き換えますhttp://3a4b522a.wp.tmp
を検索し、http://wp.tmp
に置き換えますこれらの検索および置換コマンドはすべて、前に更新した3つのテーブル(*_options
*_blogs
)を無視する必要があります。そうしないと、構成が壊れることになります。 home
およびsiteurl
キーの外側のwp_*_options
テーブル内のURLを手動で探すこともできます。
WP-CLIの search-replaceコマンド を使用することをお勧めします。シリアル化されたデータを扱うことができ、HTTPによる制限がないためです。
もっと簡単な代替方法(コードのどの行にも触れる必要はありません)は、 オールインワンマイグレーション プラグインを使用することです。
new.example.com
とID 15
をエクスポートexample.com
でID 1
に再インポートしてください