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.
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:
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;
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):
wp_options
die Schlüssel home
und siteurl
wp_2_options
die Schlüssel home
und siteurl
(in Ihrem Fall wäre dies wp_15_options
)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.)
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
:
(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
undfoo.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 |
+---------+--------------------+---------------------+---------------------+
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
.
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:
http://foo.wp.tmp
und ersetzen Sie es durch einen möglichst eindeutigen Slug: http://3a4b522a.wp.tmp
http://wp.tmp
und ersetzen Sie es durch http://foo.wp.tmp
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.
Eine einfachere Alternative (bei der keine Codezeile berührt wird) ist die Verwendung des Plugins All-in-One-Migration :
new.example.com
mit ID 15
undexample.com
mit ID 1