Cum să convertești o instalare WordPress Multisite într-un site single
Având o rețea WordPress Multisite, cu un blog principal și presupunând că tot conținutul a fost mutat pe acel blog, cum ai putea să transformi rețeaua înapoi într-o instalație WordPress standard, fără rețea și fără funcționalitatea multisite?

Am parcurs pașii pentru a extrage un site dintr-o instalare multisite într-o instanță individuală:
- Configurează o copie curată de WP dar nu o instala
- Găsește ID-ul site-ului
- Copiază fișierele din blogs.dir/ID/files în noul folder uploads al WP
- Copiază tema utilizată de site și orice plugin-uri în folderele corespunzătoare din noul folder wp-content
- Fă o copie de rezervă a bazei de date multisite, dar doar tabelele pentru site-ul țintă și tabelele users și usermeta folosind MySQL Workbench sau echivalent
- Restaurează copia de rezervă într-o nouă bază de date și schimbă prefixele numelor tabelelor astfel încât să fie toate la fel, de ex. 'wp_SITEID_' în 'wp_'
- Folosind MySQL Workbench sau Query Browser, curăță tabelele users și usermeta astfel:
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_%';
- Începe procesul de instalare WP pentru a crea un
wp-config.php
dar nu face click pe 'Run the install' - Creează un fișier .htaccess implicit dacă erau folosite permalink-uri sau pur și simplu vizitează pagina de permalink-uri în wp-admin
- Va trebui să actualizezi orice URL-uri vechi din baza ta de date. Ideal ar fi să folosești un instrument sigur de căutare/înlocuire precum cel din wp-cli sau predecesorul său general search/replace db by interconnect/it. Specific, înlocuiește
blogs.dir/SITE_ID/files
cuuploads
și dacă schimbi URL-ul site-ului tău, cautăoldsite.com
și înlocuiește cunewsite.com
.
Destul de mult efort și trebuie să fii atent cu modificările în baza de date, dar asta este singura metodă pe care o văd pentru a extrage un singur site dintr-un multisite existent cu toate setările etc. intacte.
EDIT:
După cum a observat @Jake, am uitat să menționez pașii finali pe care ar trebui să-i faci, de ex. căutare/înlocuire a URL-urilor vechi. Am actualizat lista în consecință.

Nimic din pasul 7 nu a funcționat sau a avut vreun efect când am schimbat SITEID
cu ID-ul corect al site-ului. În loc de asta, ar trebui să menționezi că opțiunile siteurl
și home
vor trebui probabil actualizate în tabela wp_options
. Restul acestui ghid a fost destul de bun. Mulțumesc.

De asemenea, va fi probabil necesar să faci o căutare și înlocuire în baza de date pentru vechiul domeniu / noul domeniu dacă se schimbă. Și va fi aproape SIGUR necesar să faci căutare și înlocuire pentru blogs.dir sau uploads/sites pentru a te asigura că toate linkurile către imagini/fișiere sunt corecte. Fii atent însă cu toate datele serializate din WP. Nu este foarte sigur să rulezi o căutare și înlocuire deschisă în MYSQL. Folosește ceva de genul: http://interconnectit.com/products/search-and-replace-for-wordpress-databases/

@Jake mulțumesc, am uitat contextul schimbării URL-ului și ai dreptate, am omis pasul de căutare/înlocuire pentru URL-urile existente, adaug asta pentru completitudine

@Jake Nu am intrat în detalii, dar pasul 7 practic elimină utilizatorii care nu aparțin site-ului din care extrăgeți și asigură că ei încă au permisiunile corecte. Este de fapt o sarcină de curățenie.

Am înțeles ce au făcut, doar că primele câteva mi-au returnat erori, dar poate am ratat ceva și nu sunt sigur că aveam vreun utilizator de curățat, așa că a fost ușor să sar peste oricum. Și să nu mă înțelegeți greșit, acest lucru a fost extrem de util și fără celelalte aspecte, doar că e bine de notat pentru utilizarea viitoare. Mulțumesc!

Este posibil să eliminați instalarea multisite fără a reinstala un nou blog. Urmați pașii.
- Creați o copie de rezervă, un dump al bazei de date și o copie de rezervă a fișierelor din wp-content
- Setați constanta
WP_ALLOW_MULTISITE
în wp-config.php laFALSE
Eliminați sau comentați setările MU în
wp-config.php
, astfel:/** 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 ); */
Eliminați setările MU din
.htaccess
, precum în sursa de mai jos:# BEGIN WordPress RewriteEngine On RewriteBase /wordpress/ RewriteRule ^index\.php$ - [L] # fișiere încărcate RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L] # adăugați o bară oblică la final pentru /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
Creați din nou legăturile permanente în backend
wp-admin/options-permalink.php
și eventual copiați rezultatul în.htaccess
, dacă WP nu are drepturi de scriere pe acest fișier.Eliminați intrările inutile din tabelul
users
; utilizați următoarea instrucțiune SQL într-un instrument precum phpMyAdmin sau Adminer`ALTER TABLE `wp_users` DROP `spam`, DROP `deleted`;`
Următoarele tabele pot fi șterse:
- wp_blogs
- wp_blog_versions
- wp_registration_log
- wp_signups
- wp_site
- wp_sitemeta
- wp_sitecategories (doar dacă există)
(schimbați
wp_
cu prefixul dumneavoastră al bazei de date)Acum aveți doar tabelele rămase de la alte bloguri din rețea. Dacă doriți să utilizați și acest conținut, exportați-l mai întâi prin exportul WordPress ca XML și importați-l acum în instalarea curată single.

De fapt, este posibil și destul de ușor de realizat; am făcut-o de mai multe ori personal.
Există trei lucruri de luat în considerare.
- wp-config.php care definește dacă este un site multiplu sau un singur site
- .htaccess care conține regulile de rescriere pentru a suporta site-ul multiplu
- tabelele suplimentare create pentru a suporta site-ul multiplu
Comentarea define-ului pentru site-ul multiplu în wp-config și actualizarea legăturilor permanente va readuce site-ul în modul single site/implicit. Apoi, tot ce trebuie să faci este să cureți baza de date.
Dacă din anumite motive nu poți accesa wp-admin pentru a actualiza legăturile permanente, pur și simplu șterge fișierul .htaccess. WordPress îl va recrea pentru tine în modul single site.
Voi încerca să găsesc link-ul către codurile/articolul de suport și voi actualiza răspunsul cu acesta.
Iată un link către un subiect din forumul de suport http://wordpress.org/support/topic/revert-to-single-site

Procesele de bază prezentate aici funcționează bine chiar și în WP 3.5.1. O clarificare: Dacă ai denumit sub-site-ul tău într-un anumit fel, va trebui să modifici legăturile din baza de date pentru a elimina acel nume. Dacă sub-site-ul meu se numea... mysite.com/comics, după ce urmezi procedurile de mai sus, WordPress-ul tău va căuta mysite.com/comics și va primi erori la legăturile permanente. Editează tabela WP-OPTIONS căutând extensia /comics și elimin-o. De asemenea, verifică dacă directorul Uploads indică locația corectă - este posibil să mai afișeze o intrare blogs.dir și ar trebui să indice acum wp-content/uploads/
