Come convertire un'installazione WordPress Multisite in un singolo sito
Data una rete WordPress Multisite con un blog principale, e assumendo che tutto il contenuto sia stato spostato su quel blog, come sarebbe possibile riconvertire la rete in un'installazione WordPress standard non in rete e non multisito?

Ho seguito i passaggi per estrarre un sito da un'installazione multisito a un'istanza singola:
- Configura una copia pulita di WP ma non installarla
- Trova l'ID del sito
- Copia i file da blogs.dir/ID/files nella nuova cartella degli uploads di WP
- Copia il tema utilizzato dal sito e qualsiasi plugin utilizzato nelle cartelle appropriate nella nuova cartella wp-content
- Esegui un backup del database multisito ma solo delle tabelle per il sito target e delle tabelle users e usermeta utilizzando MySQL Workbench o un equivalente
- Ripristina il backup in un nuovo database e cambia i prefissi dei nomi delle tabelle in modo che siano tutti uguali, ad esempio da 'wp_SITEID_' a 'wp_'
- Utilizzando MySQL Workbench o un browser di query, pulisci le tabelle users e usermeta come segue:
DELETE FROM wp_usermeta WHERE user_id NOT IN( SELECT distinct(user_id) FROM wp_usermeta where meta_key LIKE 'wp_SITEID_%' );
DELETE FROM wp_users WHERE ID NOT IN( SELECT distinct(user_id) FROM wp_usermeta where meta_key LIKE 'wp_SITEID_%' );
UPDATE wp_usermeta SET meta_key = REPLACE( meta_key, 'wp_SITEID_', 'wp_' ) WHERE meta_key LIKE 'wp_SITEID_%';
UPDATE wp_options SET option_name = REPLACE( option_name, 'wp_SITEID_', 'wp_' ) WHERE option_name LIKE 'wp_SITEID_%';
- Inizia il processo di installazione di WP per creare un
wp-config.php
ma non cliccare su 'Esegui l'installazione' - Crea un file .htaccess predefinito se erano in uso i permalink o visita semplicemente la pagina dei permalink in wp-admin
- Dovrai aggiornare i vecchi URL nel tuo database successivamente. Idealmente, utilizza uno strumento di ricerca/sostituzione sicuro come quello in wp-cli o il suo predecessore generico search/replace db di interconnect/it. Sostituisci specificamente
blogs.dir/SITE_ID/files
conuploads
, e se stai cambiando l'URL del tuo sito, cercaoldsite.com
e sostituisci connewsite.com
.
Un bel po' di impegno e devi stare attento con le modifiche al database, ma questo è l'unico modo che conosco per estrarre un singolo sito da un multisito esistente con tutte le sue impostazioni, ecc... intatte.
MODIFICA:
Come notato da @Jake, ho dimenticato di menzionare i passaggi finali che potresti dover eseguire, ad esempio la ricerca/sostituzione dei vecchi URL. Ho aggiornato l'elenco di conseguenza.

Nessuno dei passaggi del punto 7 ha funzionato o ha avuto effetto quando ho cambiato SITEID
con l'ID corretto del sito. Invece di ciò, dovresti menzionare che le opzioni siteurl
e home
probabilmente dovranno essere aggiornate nella tabella wp_options
. Il resto era un buon elenco di controllo. Grazie.

Inoltre, sarà probabilmente necessario eseguire una ricerca e sostituzione nel database per il vecchio dominio / nuovo dominio se si cambia. E sarà quasi SICURO che sarà necessario fare una ricerca e sostituzione per blogs.dir o uploads/sites per assicurarsi che i collegamenti a immagini/file siano corretti. Fai attenzione però con tutti i dati serializzati in WP. Non è molto sicuro eseguire una ricerca e sostituzione aperta in MYSQL. Usa qualcosa come: http://interconnectit.com/products/search-and-replace-for-wordpress-databases/

@Jake grazie, ho dimenticato il contesto del cambio di URL e hai ragione, mi è mancato il passaggio di ricerca/sostituzione per gli URL esistenti, lo aggiungo per completezza

@Jake Non sono entrato nei dettagli ma il passaggio 7 fondamentalmente rimuove gli utenti che non appartengono al sito da cui stai estraendo e si assicura che mantengano le autorizzazioni corrette. È sostanzialmente un'attività di pulizia.

Ho capito cosa facevano, solo che i primi due mi hanno restituito degli errori, ma forse mi mancava qualcosa, e non sono sicuro di avere avuto utenti da ripulire, quindi è stato facile saltarli comunque. E non fraintendermi, questo è stato estremamente utile anche senza quell'altra roba, è solo bene prenderne nota per un uso futuro. Grazie!

È possibile rimuovere l'installazione multisito senza reinstallare un nuovo blog. Segui questi passaggi.
- Crea un backup, un dump del database e un backup dei file di wp-content
- Imposta la costante
WP_ALLOW_MULTISITE
nel tuo wp-config.php suFALSE
Rimuovi o commenta le impostazioni MU in
wp-config.php
, come questo:/** 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 ); */
Rimuovi le impostazioni MU da
.htaccess
, come nel sorgente qui sotto:# 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
Ricrea i permalink, nel backend
wp-admin/options-permalink.php
e magari copia il risultato in.htaccess
, se WordPress non può farlo per mancanza di diritti di scrittura sul file.Rimuovi le voci inutili nella tabella
users
; usa la seguente istruzione sql in uno strumento come phpMyAdmin o Adminer`ALTER TABLE `wp_users` DROP `spam`, DROP `deleted`;`
Le seguenti tabelle possono essere eliminate:
- wp_blogs
- wp_blog_versions
- wp_registration_log
- wp_signups
- wp_site
- wp_sitemeta
- wp_sitecategories (solo se esiste)
(cambia
wp_
con il prefisso del tuo database)Ora hai solo le ultime tabelle degli altri blog della rete. Se vuoi utilizzare anche questo contenuto, esportalo prima tramite l'esportazione di WordPress come XML e importalo ora nella nuova installazione singola pulita.

In realtà è possibile e abbastanza semplice da fare; l'ho fatto personalmente diverse volte.
Ci sono tre aspetti da considerare.
- wp-config.php che definisce se è un sito multisito o singolo
- .htaccess che contiene le regole di riscrittura per supportare il multisito
- le tabelle aggiuntive create per supportare il multisito
Commentando la definizione del multisito define(?) in wp-config e aggiornando i tuoi permalink, il sito tornerà alla modalità singolo sito/predefinita. Poi tutto ciò che devi fare è pulire il database.
Se per qualche motivo non riesci ad accedere al tuo wp-admin per aggiornare i permalink, elimina semplicemente il file .htaccess. WordPress lo ricreerà per te in modalità singolo sito.
Farò del mio meglio per trovare il link ai codici/articolo di supporto e aggiornerò la risposta con esso.
Ecco un link a un elemento nel forum di supporto http://wordpress.org/support/topic/revert-to-single-site

I processi di base qui descritti funzionano bene anche in WP 3.5.1 Una precisazione: Se hai nominato il tuo sottosito in un certo modo, dovrai modificare i link nel database per rimuovere quel nome. Se il mio sottosito si chiamava... mysite.com/comics allora dopo aver seguito le procedure sopra descritte, il tuo WP cercherà mysite.com/comics e otterrà errori sui permalink. Modifica la tabella WP-OPTIONS cercando l'estensione /comics e rimuovila. Inoltre, verifica che la directory Uploads punti alla posizione corretta - potrebbe ancora mostrare una voce blogs.dir e dovrebbe invece puntare a wp-content/uploads/
