Konvertieren Sie eine Multisite-WordPress-Installation in eine einzelne Site


17

Wenn Sie ein WordPress Multisite-Netzwerk mit einem Hauptblog haben und davon ausgehen, dass der gesamte Inhalt in dieses Blog verschoben wurde, wie würde man dann das Netzwerk wieder in eine standardmäßige WordPress-Nicht-Netzwerk-Nicht-Multisite-Installation reduzieren?


Ich habe unten zwei hilfreiche Links gefunden, das IST möglich. Ich fand hilfreiche Informationen hier: wpmututorials.com/how-to/how-to-disable-multisite und hier: wordpress.org/support/topic/… Wir werden sehen, wie es geht.

Ich denke, ein besserer Ausdruck wäre, eine einzelne Site aus einem Netzwerk zu extrahieren. Das Zurückklappen eines Netzwerks würde nur auf der Hauptwebsite wirklich funktionieren, nicht auf der, die darauf erstellt wurde.
Ranchothefat

Antworten:


17

Ich habe die folgenden Schritte ausgeführt, um eine Site aus einer Installation mit mehreren Standorten in eine einzelne Instanz zu extrahieren:

  1. Richten Sie eine saubere Kopie von WP ein, aber installieren Sie sie nicht
  2. Suchen Sie die Site-ID
  3. Kopieren Sie die Dateien aus blogs.dir / ID / files in den neuen WP-Upload-Ordner
  4. Kopieren Sie das von der Site verwendete Design und alle verwendeten Plugins in die entsprechenden Ordner im neuen Ordner "wp-content"
  5. Erstellen Sie eine Sicherungskopie der Datenbank mit mehreren Standorten, jedoch nur der Tabellen für die Zielsite sowie der Benutzer- und Usermeta-Tabellen mit MySQL Workbench oder einer entsprechenden Instanz
  6. Stellen Sie die Sicherung in einer neuen Datenbank wieder her und ändern Sie die Präfixe der Tabellennamen, damit sie alle gleich sind, z. 'wp_SITEID_' bis 'wp_'
  7. Verwenden Sie die MySQL Workbench oder den Abfrage-Browser, um die Benutzer- und Usermeta-Tabellen wie folgt zu ordnen:
    1. DELETE FROM wp_usermeta WHERE user_id NOT IN( SELECT distinct(user_id) FROM wp_usermeta where meta_key LIKE 'wp_SITEID_%' );
    2. DELETE FROM wp_users WHERE ID NOT IN( SELECT distinct(user_id) FROM wp_usermeta where meta_key LIKE 'wp_SITEID_%' );
    3. UPDATE wp_usermeta SET meta_key = REPLACE( meta_key, 'wp_SITEID_', 'wp_' ) WHERE meta_key LIKE 'wp_SITEID_%';
    4. UPDATE wp_options SET option_name = REPLACE( option_name, 'wp_SITEID_', 'wp_' ) WHERE option_name LIKE 'wp_SITEID_%';
  8. Starten Sie den WP-Installationsprozess, um eine zu erstellen wp-config.php, klicken Sie jedoch nicht auf "Installation ausführen".
  9. Erstellen Sie eine Standard-.htaccess-Datei, wenn Permalinks verwendet wurden, oder besuchen Sie einfach die Permalinks-Seite in wp-admin
  10. Als Nächstes müssen Sie alle alten URLs in Ihrer Datenbank aktualisieren. Verwenden Sie im Idealfall ein sicheres Such- / Ersetzungswerkzeug wie das in wp-cli oder dessen Allzweck-Vorläufer, um DB durch Interconnect zu ersetzen . Insbesondere ersetzen blogs.dir/SITE_ID/filesdurch uploadsund wenn Sie die URL Ihrer Site ändern, suchen Sie nach oldsite.comund ersetzen durch newsite.com.

Ein bisschen Aufwand und Sie müssen vorsichtig mit den Datenbankbearbeitungen sein, aber das ist das einzige, was ich sehen kann, um eine einzelne Site aus einer vorhandenen Multisite mit all ihren Einstellungen usw. zu extrahieren ... intakt.

BEARBEITEN:

Wie von @Jake entdeckt, habe ich vergessen, die letzten Schritte zu erwähnen, die Sie möglicherweise ausführen müssen, z. Suchen / Ersetzen alter URLs. Ich habe die Liste entsprechend aktualisiert.


Nichts in Schritt 7 funktionierte oder hatte irgendeine Auswirkung, als ich SITEIDzur korrekten Site-ID wechselte. Statt dessen sollten Sie erwähnen , dass die siteurlund homeOptionen werden wahrscheinlich in der aktualisierten werden müssen wp_optionsTabelle. Der Rest war eine ziemlich gute Checkliste. Vielen Dank.
Jake

Außerdem muss wahrscheinlich ein Suchen und Ersetzen in der Datenbank für die alte Domäne / neue Domäne durchgeführt werden, wenn Änderungen vorgenommen werden. Und fast auf jeden Fall müssen Sie für blogs.dir oder Uploads / Sites suchen und ersetzen, um sicherzustellen, dass alle Links zu Bildern / Dateien korrekt sind. Seien Sie jedoch vorsichtig mit allen serialisierten Daten in WP. Es ist nicht sehr sicher, ein offenes Suchen und Ersetzen in MYSQL auszuführen. Verwenden Sie etwas wie: interconnectit.com/products/…
Jake

@Jake Dank, habe ich vergessen , den Kontext der URL zu ändern , und Sie haben Recht verpasste ich die Suchen / Ersetzen Schritt für bestehende URLs, fügte hinzu , dass in aus Gründen der Vollständigkeit
sanchothefat

@Jake Ich habe nicht ins Detail gegangen, aber Schritt 7 entfernt im Grunde genommen Benutzer, die nicht zu der Site gehören, die Sie extrahieren, und stellt sicher, dass sie immer noch die richtigen Berechtigungen haben. Es ist wirklich eine Bereinigungsaufgabe.
sanchothefat

Ich verstand, was sie taten, nur das erste Paar gab Fehler für mich zurück, aber vielleicht fehlte mir etwas, und ich bin nicht sicher, ob ich irgendwelche Benutzer hatte, um aufzuräumen, so dass es trotzdem einfach war, zu überspringen. Und versteh mich nicht falsch, das war extrem hilfreich ohne dieses andere Zeug, nur gut, um es für die zukünftige Verwendung zu merken. Vielen Dank!
Jake

5

Es ist möglich, die Multisite-Installation zu entfernen, ohne ein neues Blog neu zu installieren. Befolgen Sie die Schritte.

  1. Erstellen Sie eine Sicherung, einen Datenbank-Dump und eine Dateisicherung von WP-Inhalten
  2. Stelle die Konstante WP_ALLOW_MULTISITEin deiner wp-config.php aufFALSE
  3. Entfernen oder kommentieren Sie die MU-Einstellungen wp-config.phpwie folgt:

    /**
    define( 'MULTISITE', true );
    define( 'SUBDOMAIN_INSTALL', false );
    $base = '/wordpress/';
    define( 'DOMAIN_CURRENT_SITE', 'localhost' );
    define( 'PATH_CURRENT_SITE', '/wordpress/' );
    define( 'SITE_ID_CURRENT_SITE', 1 );
    define( 'BLOG_ID_CURRENT_SITE', 1 );
    */
  4. Entfernen Sie die MU-Einstellungen .htaccesswie in der folgenden Quelle:

    # BEGIN WordPress
    RewriteEngine On
    RewriteBase /wordpress/
    RewriteRule ^index\.php$ - [L]
    
    # uploaded files
    RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]
    
    # add a trailing slash to /wp-admin        
    RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
    
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ - [L]
    RewriteRule  ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
    RewriteRule  ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
    RewriteRule . index.php [L]
    # END WordPress
  5. Erstellen Sie die neuen Permalinks im Backend wp-admin/options-permalink.phpund kopieren Sie das Ergebnis .htaccessmöglicherweise in die Schreibrechte für diese Datei, falls dies für WP nicht möglich ist.

  6. Entfernen Sie nicht nützliche Einträge in der Tabelle users. Verwenden Sie die Anweisung follow sql in einem Tool wie phpMyAdmin oder Adminer

    `ALTER TABLE `wp_users` DROP `spam`, DROP `deleted`;`
  7. Die folgenden Tabellen können gelöscht werden:

    • wp_blogs
    • wp_blog_versions
    • wp_registration_log
    • wp_signups
    • wp_site
    • wp_sitemeta
    • wp_sitecategories (nur falls vorhanden)

    (ändere wp_dein Datenbank-Präfix)

  8. Jetzt haben Sie nur die letzten Tabellen anderer Blogs des Netzwerks. Wenn Sie diesen Inhalt auch verwenden wollen, dann exportieren Sie diesen vorher per WordPress-Export als XML und importieren Sie ihn jetzt in der sauberen Einzelinstallation.


1
Dies ist eine gute Antwort, aber ich habe die von @sanchothefat akzeptiert, da diese verwendet werden kann, um jede Site unabhängig von ihrer ID zu extrahieren, wohingegen Ihre Anweisungen mir die Root-Site geben würden
Tom J Nowell

1

Eigentlich ist es möglich und ziemlich einfach zu tun; Ich habe es selbst mehrmals gemacht.

Es gibt da Dinge zu beachten.

  1. wp-config.php definiert, ob es sich um eine Multi-Site oder eine Single-Site handelt
  2. .htaccess, das die Umschreiberegeln für die Unterstützung mehrerer Sites enthält
  3. die zusätzlichen Tabellen, die zur Unterstützung mehrerer Sites erstellt wurden

Wenn Sie die Definition (?) Für mehrere Sites in wp-config auskommentieren und Ihre Permalinks aktualisieren, wird die Site auf Single Site / Standardmodus zurückgesetzt. Dann müssen Sie nur noch Ihre Datenbank bereinigen.

Wenn Sie aus irgendeinem Grund nicht auf Ihren wp-admin zugreifen können, um die Permalinks zu aktualisieren, löschen Sie einfach Ihre .htaccess-Datei. WordPress erstellt es für Sie im Single-Site-Modus neu.

Ich werde mein Bestes tun, um den Link zu den Codes / dem Support-Artikel zu finden und die Antwort damit zu aktualisieren.

Hier ist ein Link zu einem Element im Support-Forum http://wordpress.org/support/topic/revert-to-single-site


0

Die grundlegenden Prozesse hier funktionieren auch in WP 3.5.1 gut. Eine Klarstellung: Wenn Sie Ihrer Unterwebsite einen Namen gegeben haben, müssen Sie die Links in der Datenbank ändern, um diesen Namen zu entfernen. Wenn meine Unterwebsite den Namen ... mysite.com/comics trägt, sucht Ihr WP nach den oben beschriebenen Schritten nach mysite.com/comics und zeigt Fehler in den Permalinks an. Bearbeiten Sie die Tabelle WP-OPTIONS und suchen Sie nach der Erweiterung / comics. Entfernen Sie sie. Vergewissern Sie sich auch, dass das Uploads-Verzeichnis auf den richtigen Speicherort verweist. Möglicherweise wird noch ein blogs.dir-Eintrag angezeigt, und Sie sollten stattdessen auf wp-content / uploads / verweisen.


Können Sie dies bitte bearbeiten, um eine eigenständige Antwort zu erhalten? Es sieht so aus, als ob es ein Kommentar zu einer der anderen Antworten sein könnte.
s_ha_dum

0

Der sehr wichtige Punkt, der nicht übersehen werden sollte und über den weniger gesprochen wird, ist, dass Sie immer noch die Zeile haben sollten:

define( 'WP_ALLOW_MULTISITE',...

Es sollte aber auf den neuesten Stand gebracht werden

define( 'WP_ALLOW_MULTISITE', 0 );

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.