web-dev-qa-db-ja.com

WordPressマルチサイトでプライマリサイトを切り替える

私たちはWordPress Multisite環境でいくつかのサブドメインサイトを運営していて、プライマリサイトをルートからサブドメインに切り替えたいと思っています。

現在のサイトはexample.comID 1です(フィールドが設定され編集不可のため名前を変更できません)

新しいサイトはnew.example.com付きのID 15です(example.comに名前を変更しようとしました)

私は、サイトの名前を変更し、wp-config.phpSITE_ID_CURRENT_SITEの新しいID 15を指定するためにBlog_ID_CURRENT_SITEファイルを更新することを含む切り替えのためのいくつかの指示に従いました。その結果、メインサイトは変更されず、管理者は気を狂わせました。

投稿/ページやプラグインをインポートせずにメインサイトを切り替えてサブドメインサイトのコンテンツに置き換える簡単な方法はありますか?


更新:

これらのヒントを与えてくれてありがとう。私がデータベースを見て、読んで、そしてあなたから得たものとの私の結論は、メインサイトを置き換えるための新しいサブドメインサイトは1のベーステーブル名とID、更新されたパスなどを持つ必要があるということです。これらを切り替えた後、ネットワーク管理者には問題があるでしょう - そのため、基本テーブル(wp_optionsなど)を同等のもの(wp_x_optionsなど)と比較して、それらの基本テーブルにネットワーク管理に関連する固有のものがないか確認します。

5
jamie

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 |
+---------+--------------------+---------------------+---------------------+

ネットワークサイトリストは次のようになります。

network site list 

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_*_optionwp_blogsを使用して、指定されたリクエストURLに一致するブログを見つけ、このブログの適切なパーマリンクを作成します。したがって、次の3つの表の値を変更する必要があります(この例の場合)。

  • wp_optionsでは、キーhomesiteurl
  • wp_2_optionsでは、キーhomesiteurl(あなたの場合、これはwp_15_optionsになります)
  • wp_blogsでは、IDが1および2(それぞれ15)の両方のサイトの列domain

私はこれにはAdminerを使用していますが、他のDB管理ツール(PhpMyAdmin)も同様に機能します。 (スクリーンショットはドイツ語のGUIを示していますが、その考えは明らかであると思います。)

adminer edit wp_options 

wp_options(サイトID 1のオプション表)で、キーhomesiteurlの両方の値をhttp://wp.tmpからhttp://foo.tmpに変更します。 (上のスクリーンショットは更新前の状態を示しています。)

テーブルwp_2_optionsについてもまったく同じですが、ここでは値をhttp://foo.wp.tmpからhttp://wp.tmpに変更します。

次のステップは、テーブルwp_blogsを更新することです。

adminer edit wp_blogs  (この場合も、スクリーンショットには変更を加える前の表が表示されています。)ここでは、両方のサイトからdomain列で値を切り替えるだけです。

  • wp.tmpfoo.wp.tmpになり、
  • foo.wp.tmpwp.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 |
+---------+--------------------+---------------------+---------------------+

network site list updated 

覚えておいてください:このプロセスの間、あなたのサイトは利用できず、リクエストはいくつかの厄介なエラーで終わるでしょう。あなたのWordPressインストールの前に503 Service Unavailableレスポンスを手配したいかもしれません。これは .htaccess を使って行うことができます。

データベースコンテンツの更新

今トリッキーな部分が来ます。現時点では、 コンテンツテーブル 内のすべてのURLはまだ古いサイトのリソースを参照しています。最初のステップですべてのhttp://foo.wp.tmphttp://wp.tmpに置き換え、次のステップですべてのhttp://wp.tmphttp://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による制限がないためです。

7
David

もっと簡単な代替方法(コードのどの行にも触れる必要はありません)は、 オールインワンマイグレーション プラグインを使用することです。

  1. new.example.comID 15をエクスポート
  2. example.comID 1に再インポートしてください
0
SuperAtic