it-swarm.com.de

Wechseln der primären Site in WordPress Multisite

Wir betreiben mehrere Subdomain-Sites in einer WordPress-Multisite-Umgebung und möchten die primäre Site vom Stammverzeichnis auf eine Subdomain wie folgt umstellen:

Die aktuelle Site ist example.com mit ID 1 (kann nicht umbenannt werden, da das Feld festgelegt und nicht bearbeitbar ist)

Neue Site ist new.example.com mit ID 15 (versucht, in example.com umzubenennen)

Ich habe einige Anweisungen zum Wechseln befolgt, bei denen die Websites umbenannt und die wp-config.php-Datei aktualisiert wurden, um die neue ID 15 für den SITE_ID_CURRENT_SITE und den Blog_ID_CURRENT_SITE zu erhalten. Das Ergebnis war, dass sich die Hauptseite nicht geändert hat und der Admin sich über den Haufen geworfen hat.

Gibt es eine einfache Möglichkeit, die Hauptseite auszutauschen und durch den Inhalt der Unterdomain-Site zu ersetzen, ohne Beiträge/Seiten und Plugins zu importieren?


AKTUALISIEREN:

Vielen Dank für diese Tipps. Mein Fazit mit dem, was ich in der Datenbank gesehen, gelesen und von Ihnen erhalten habe, ist, dass die neue Subdomain-Site zum Ersetzen der Haupt-Site die Namen der Basistabelle und die ID 1, aktualisierte Pfade usw. haben muss. Meine einzige Sorge ist, dass Nach dem Wechsel hat der Netzwerkadministrator ein Problem. Daher muss ich im Grunde die Basistabellen (wp_options etc) mit den entsprechenden (wp_x_options etc) vergleichen, um festzustellen, ob in diesen Basistabellen etwas Einzigartiges in Bezug auf den Netzwerkadministrator vorhanden ist.

5
jamie

Vier Jahre alt und keine Antwort? Auf geht's…-

Nehmen wir als Beispiel das folgende Netzwerk-Setup (ich verwende den Befehl site list von WP-CLI):

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

Die Liste der Netzwerkstandorte sieht folgendermaßen aus:

 network site list 

Wir möchten die Site mit der ID 2 als neue Root-Site mit der URL http://wp.tmp/ verwenden. Dies ist eigentlich das gleiche Problem wie in der Frage beschrieben, nur mit einigen anderen Werten für die ID und die URLs.

Der für mehrere Standorte relevante Teil des wp-config.php sieht wahrscheinlich so aus:

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;

Aktualisieren der Einstellungen der Datenbanksite

WordPress verwendet die Tabellen wp_*_option und wp_blogs, um das passende Blog für eine bestimmte Anforderungs-URL zu finden und richtige Permalinks für dieses Blog zu erstellen. Wir müssen also die Werte in den folgenden drei Tabellen ändern (für dieses Beispiel):

  • In wp_options die Schlüssel home und siteurl
  • In wp_2_options die Schlüssel home und siteurl (in Ihrem Fall wäre dies wp_15_options)
  • In wp_blogs die Spalte domain für beide Sites mit der ID 1 und 2 (bzw. 15)

Ich verwende hierfür Adminer, aber auch jedes andere DB-Verwaltungstool (PhpMyAdmin) erledigt den Job. (Die Screenshots zeigen die GUI in deutscher Sprache, aber ich denke, die Idee ist klar.)

 adminer edit wp_options 

In wp_options (der Optionstabelle für die Site-ID 1) ändere ich die Werte der beiden Schlüssel home und siteurl von http://wp.tmp in http://foo.tmp. (Der Screenshot oben zeigt den Status vor dem Update.)

Ich mache genau das gleiche mit der Tabelle wp_2_options, aber hier ändere ich den Wert von http://foo.wp.tmp in http://wp.tmp.

Im nächsten Schritt aktualisieren Sie die Tabelle wp_blogs:

 adminer edit wp_blogs  (Wieder zeigt der Screenshot die Tabelle, bevor ich Änderungen vorgenommen habe.) Hier können Sie einfach die Werte von beiden Sites in der Spalte domain ändern:

  • wp.tmp wird zu foo.wp.tmp und
  • foo.wp.tmp wird zu wp.tmp

Jetzt müssen Sie den wp-config.php aktualisieren, um mit den neuen Einstellungsdaten richtig umzugehen:

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;

Zu diesem Zeitpunkt haben Sie wieder eine funktionierende WordPress-Multisite, jedoch mit einer neuen Root-Site:

$ 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 

Denken Sie daran: Während dieses Vorgangs ist Ihre Site nicht verfügbar, und Anfragen führen zu bösen Fehlern. Möglicherweise möchten Sie eine 503 Service Unavailable-Antwort vor Ihrer WordPress-Installation anordnen. Dies könnte erfolgen mit .htaccess .

Aktualisieren des Datenbankinhalts

Jetzt kommt der schwierige Teil. Momentan verweisen alle URLs in den Inhaltstabellen noch auf die Ressourcen der alten Sites. Das Ersetzen ist jedoch nicht einfach: Wenn Sie im ersten Schritt jeden http://foo.wp.tmp durch http://wp.tmp und im nächsten Schritt jeden http://wp.tmp durch http://foo.wp.tmp ersetzen, werden alle früheren URLs auf Site-ID 1 (http://foo.wp.tmp) verweisen.

Am besten fügen Sie einen Zwischenschritt ein:

  • Suchen Sie nach http://foo.wp.tmp und ersetzen Sie es durch einen möglichst eindeutigen Slug: http://3a4b522a.wp.tmp
  • Suchen Sie nach http://wp.tmp und ersetzen Sie es durch http://foo.wp.tmp
  • Suchen Sie nach http://3a4b522a.wp.tmp und ersetzen Sie es durch http://wp.tmp

Alle diese Such- und Ersetzungsbefehle sollten die drei zuvor aktualisierten Tabellen (*_options*_blogs) ignorieren, da sie sonst die Konfiguration beschädigen würden. Sie können auch manuell nach URLs in der Tabelle wp_*_options außerhalb der Schlüssel home und siteurl suchen.

Ich würde vorschlagen, den WP-CLI-Befehl search-replace zu verwenden, da dieser mit serialisierten Daten umgehen kann und keine Einschränkungen für HTTP aufweist.

7
David

Eine einfachere Alternative (bei der keine Codezeile berührt wird) ist die Verwendung des Plugins All-in-One-Migration :

  1. exportiere new.example.com mit ID 15und
  2. importiere es erneut in example.com mit ID 1
0
SuperAtic