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.phpma 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/filesconuploads, e se stai cambiando l'URL del tuo sito, cercaoldsite.come 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.
Jake
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
@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
sanchothefat
@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.
sanchothefat
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!
Jake
È 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_MULTISITEnel 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 WordPressRicrea i permalink, nel backend
wp-admin/options-permalink.phpe 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/