質問: wordpressマルチサイトでプライマリサイトを切り替える 私たちは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による制限がないためです。