Konwertuj instalację Multisite WordPress w jedną stronę

17

Biorąc pod uwagę sieć WordPress Multisite z głównym blogiem i zakładając, że cała zawartość została przeniesiona na tego bloga, jak można by zwinąć sieć z powrotem do standardowej instalacji innej niż WordPress dla sieci innych niż sieć?

Tom J Nowell
źródło
Znalazłem dwa pomocne linki poniżej, to jest możliwe. Pomocne informacje znalazłem tutaj: wpmututorials.com/how-to/how-to-disable-multisite i tutaj: wordpress.org/support/topic/… Zobaczymy, jak to będzie.
Myślę, że lepszym sposobem na wyrażenie tego byłoby wyodrębnienie jednej witryny z sieci. Zwinięcie sieci naprawdę działałoby tylko na głównej stronie, a nie na tej, która została w niej utworzona.
sanchothefat

Odpowiedzi:

17

Przeszedłem teraz kroki, aby wyodrębnić witrynę z instalacji na wielu serwerach do jednej instancji:

  1. Skonfiguruj czystą kopię WP, ale nie instaluj jej
  2. Znajdź identyfikator witryny
  3. Skopiuj pliki z blogs.dir / ID / files do nowego folderu przesyłania WP
  4. Skopiuj motyw używany przez witrynę i wszelkie używane wtyczki do odpowiednich folderów w nowym folderze wp-content
  5. Wykonaj kopię zapasową bazy danych wielu witryn, ale tylko tabele dla witryny docelowej oraz tabele użytkowników i użytkowników przy użyciu środowiska roboczego MySQL lub równoważnego
  6. Przywróć kopię zapasową do nowej bazy danych i zmień prefiksy nazw tabel, aby były takie same, np. „wp_SITEID_” na „wp_”
  7. Za pomocą środowiska roboczego MySQL lub przeglądarki zapytań uporządkuj użytkowników i tabele użytkowników w następujący sposób:
    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. Rozpocznij proces instalacji WP, aby utworzyć, wp-config.phpale nie klikaj „Uruchom instalację”
  9. Utwórz domyślny plik .htaccess, jeśli były używane łącza bezpośrednie lub po prostu odwiedź stronę permalinks w wp-admin
  10. Następnie musisz zaktualizować wszystkie stare adresy URL w bazie danych. Najlepiej użyj bezpiecznego narzędzia do wyszukiwania / zamiany, takiego jak w wp-cli lub jego prekursora ogólnego przeznaczenia / zamiany db przez interconnect / it . W szczególności wymienić blogs.dir/SITE_ID/filesz uploads, a jeśli zmienia adres URL witryny wyszukać oldsite.comi zastąpić newsite.com.

Spory wysiłek i trzeba uważać na edycje bazy danych, ale to jedyne, co widzę, aby wyodrębnić jedną witrynę z istniejącej witryny z wszystkimi jej ustawieniami itp. Nienaruszonymi.

EDYTOWAĆ:

Jak zauważył @Jake, zapomniałem wspomnieć o ostatnich krokach, które mogą być konieczne, np. wyszukaj / zamień stare adresy URL. Zaktualizowałem odpowiednio listę.

sanchothefat
źródło
Nic w kroku 7 nie działało ani nie miało żadnego efektu, gdy zmieniłem SITEIDprawidłowy identyfikator witryny. Zamiast tego, należy wspomnieć, że siteurli homeopcje będą prawdopodobnie muszą być aktualizowane w wp_optionstabeli. Reszta to całkiem niezła lista kontrolna. Dzięki.
Jake
Prawdopodobnie trzeba będzie również znaleźć i zastąpić bazę danych dla starej domeny / nowej domeny, jeśli zostanie zmieniona. I prawie na pewno będzie musiał znaleźć i zastąpić blogs.dir lub uploads / sites, aby upewnić się, że wszelkie linki do zdjęć / plików są poprawne. Uważaj jednak na wszystkie zserializowane dane w WP. Uruchomienie otwartego wyszukiwania i zamiany w MYSQL nie jest zbyt bezpieczne. Użyj czegoś takiego: interconnectit.com/products/…
Jake
@ Jake dziękuję, zapomniałem kontekstu zmiany adresu URL i masz rację. Pominąłem etap wyszukiwania / zamiany dla istniejących adresów URL, dodając, że dla kompletności
sanchothefat
@Jake Nie wdałem się w szczegóły, ale krok 7 zasadniczo usuwa użytkowników, którzy nie należą do wyodrębnianej witryny i upewnia się, że nadal mają odpowiednie uprawnienia. To naprawdę zadanie czyszczenia.
sanchothefat
Zrozumiałem, co zrobili, tylko pierwsza para zwróciła mi błędy, ale może coś mi umknęło i nie jestem pewien, czy mam użytkowników do wyczyszczenia, więc i tak łatwo było pominąć. I nie zrozumcie mnie źle, było to niezwykle pomocne bez innych rzeczy, po prostu warto odnotować do wykorzystania w przyszłości. Dzięki!
Jake
5

Możliwe jest usunięcie instalacji wielu witryn bez ponownej instalacji nowego bloga. Postępuj zgodnie z instrukcjami.

  1. Utwórz kopię zapasową, zrzut bazy danych i kopię zapasową pliku wp-content
  2. Ustaw stałą WP_ALLOW_MULTISITEw pliku wp-config.php naFALSE
  3. Usuń lub skomentuj ustawienia MU w wp-config.phpnastępujący sposób:

    /**
    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. Usuń ustawienia MU z .htaccess, np. Źródła poniżej:

    # 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. Utwórz linki bezpośrednie nowe, w backendie wp-admin/options-permalink.phpi być może skopiuj wynik .htaccess, jeśli nie jest to możliwe dla WP, prawa do zapisu w tym pliku.

  6. Usuń niepotrzebne wpisy w tabeli users; użyj instrukcji follow sql w narzędziu, takim jak phpMyAdmin lub Adminer

    `ALTER TABLE `wp_users` DROP `spam`, DROP `deleted`;`
  7. Można usunąć następujące tabele:

    • wp_blogs
    • wp_blog_versions
    • wp_registration_log
    • wp_signups
    • wp_site
    • wp_sitemeta
    • wp_sitecategories (tylko, jeśli istnieją)

    (zmień wp_na prefiks bazy danych)

  8. Teraz masz tylko ostatnie tabele innych blogów w sieci. Jeśli będziesz używać tej zawartości, wyeksportuj ją wcześniej za pomocą WordPressa jako eksport XML i zaimportuj teraz w czystej instalacji pojedynczej.

bueltge
źródło
1
To dobra odpowiedź, ale zaakceptowałem tę autorstwa @sanchothefat, ponieważ jego można użyć do wyodrębnienia dowolnej witryny bez względu na identyfikator, podczas gdy twoje instrukcje dadzą mi stronę główną
Tom J Nowell
1

W rzeczywistości jest to możliwe i dość łatwe do zrobienia; Zrobiłem to sam kilka razy.

Są rzeczy do rozważenia.

  1. wp-config.php, który określa, czy wiele witryn czy pojedyncza witryna
  2. .htaccess, który zawiera reguły przepisywania w celu obsługi wielu witryn
  3. dodatkowe tabele utworzone w celu obsługi wielu witryn

Komentowanie multi-site-definiowania (?) W wp-config i aktualizacja permalinków spowoduje przywrócenie strony do trybu pojedynczej strony / domyślnego. Następnie wystarczy wyczyścić bazę danych.

Jeśli z jakiegoś powodu nie możesz uzyskać dostępu do administratora wp-admin, aby zaktualizować łącza bezpośrednie, po prostu usuń plik .htaccess. WordPress odtworzy go dla ciebie w trybie pojedynczej witryny.

Zrobię co w mojej mocy, aby znaleźć link do kodu / artykułu pomocy technicznej i zaktualizować odpowiedź.

Oto link do jednego elementu na forum pomocy http://wordpress.org/support/topic/revert-to-single-site

Steve
źródło
0

Podstawowe procesy tutaj działają dobrze nawet w WP 3.5.1. Jedno wyjaśnienie: jeśli nazwałeś swoją podwitrynę, będziesz musiał zmienić łącza w bazie danych, aby usunąć tę nazwę. Jeśli moja podwitryna została nazwana ... mysite.com/comics, to po wykonaniu powyższych procedur twoja WP będzie szukać mysite.com/comics i otrzyma błędy w linkach bezpośrednich. Edytuj tabelę WP-OPTIONS, szukając rozszerzenia / comics i usuń je. Sprawdź również, czy katalog Uploads wskazuje właściwą lokalizację - może nadal wyświetlać wpis blogs.dir i powinien teraz wskazywać na wp-content / uploads /

użytkownik 28829
źródło
Czy możesz to zmienić, aby była samodzielną odpowiedzią? Wygląda na to, że powinien to być komentarz do jednej z pozostałych odpowiedzi.
s_ha_dum
0

Bardzo ważną kwestią, której nie można pominąć i o której mniej się mówi, jest to, że nadal powinieneś mieć linię:

define( 'WP_ALLOW_MULTISITE',...

Ale należy to zmienić zaktualizować do

define( 'WP_ALLOW_MULTISITE', 0 );

smhnaji
źródło