Pytanie o to jak poprawnie zmienić adres bloga WordPress w bazie danych pojawia się niemal codziennie na grupie WordPress PL na Facebooku. Ten artykuł ma na celu dokładnie pokazać jak sobie (dobrze) poradzić z tym problemem i udowodnić niedowiarkom, że nie mają racji podsuwając błędne rozwiązania.
Złe metody
Jeśli ktoś radzi Ci w ten sposób lub użyłeś, którejś z poniższych metod, przygotuj się na wgranie backupu bazy, bo na 99% coś już nie działa. Owszem, podane metody są dobre o ile znasz swój motyw i swoje wtyczki na wylot, i wiesz, że nie serializują danych w żaden sposób. A głównie jednak serializują chociażby w opcjach czy w meta postów. Oto złe metody zmiany adresów w bazie:
- wszelkie polecenia SQL zawierające REPLACE
- pobieranie bazy do .txt i zmiana ciągów edytorem tekstu
- zmiana samych opcji siteurl oraz home w tabeli options
Złe są one ze względu na to, że psują serializowane dane. A bardzo, bardzo często developerzy serializują dane przed zapisem, aby ograniczyć się tylko do jednego rekordu w bazie. Ba, sam WordPress automatycznie serializuje dane jeśli tylko chcemy np. za pomocą funkcji add_option() zapisać tablicę.
A co to jest serializacja danych?
Serializowanie danych
Do serializacji używa się funkcji serialize(). Podając za dokumentacją PHP:
Generates a storable representation of a value
Czyli funkcja ta tworzy zapisywalną reprezentację wartości. Głównie używa się ich do tablic, rzadziej do obiektów (raczej tylko jeśli są to obiekty zawierające same poła).
Oto przykładowe wywołanie funkcji:
echo serialize( array(
'http://staryadres.pl',
'nazwa strony'
) );
To nam da:
a:2:{i:0;s:20:"http://staryadres.pl";i:1;s:12:"nazwa strony";}
Najważniejszy jest tutaj fragment s:20. Oznacza on, że po następnym znaku : w cudzysłowie nastąpi ciąg składający się z 20 znaków.
Jeśli zmienimy adres na jakikolwiek inny (o innej liczbie znaków), wszystkie dane się posypią. unserialize() wtedy zwróci false i wygeneruje notice (nie fatala!), więc błędy na stronie nie muszą być oczywiste i od razu widoczne. A jak zapiszesz jakiś wpis, który serializuje dane, nadpisze on wszystko to co było. Dobrze mieć w takim wypadku świeży backup, najlepiej ze starymi adresami.
Pamiętaj, że przeliczanie zserializowanych danych na popsutej bazie jest trudniejsze i raczej będzie wiązać się już z kosztami.
Dobra metoda
Najlepiej jest użyć świetnego narzędzia, które wykonała firma interconnect/it: DATABASE SEARCH AND REPLACE SCRIPT IN PHP.
Oto dokładna instrukcja jak użyć tego narzędzia.
1. Zrób backup
Nie bagatelizuj tego kroku. Zrób backup dowolną wtyczką lub przez phpMyAdmina na swoim serwerze.
2. Ściągnij archiwum replacera i przygotuj pliki
Pobrane archiwum wypakuj i zmień nazwę folderu znajdującego się w środku. Nazwa najlepiej jak będzie prosta do wpisania, np.: dbreplacer321. Lepiej dmuchać na zimne i sprawić, żeby adres replacera chociaż przez chwilę był trudny do odgadnięcia. Pamiętaj, że do plików replacera będzie publiczny dostęp!
3. Wyślij pliki na serwer i odpal replacera
Folder ze zmienioną nazwą wgraj przez FTP do głównego katalogu swojej strony tak, aby był obok katalogów wp-content i wp-admin.
Teraz wystarczy wejść pod adres-twojego-bloga.pl/nazwa-katalogu-z-replacerem. Np.: www.wpart.pl/dbreplacer321
4. Zmień adresy
Plus tego narzędzia jest taki, że odczytuje on stałe danych do bazy zdefiniowane przez WordPressa! Nie trzeba więc uzupełniać ani nazwy bazy, ani loginu i hasła użytkownika, ani hosta. Jedyne co nas interesuje to wprowadzenie starej domeny w polu search for i nowej domeny w polu replace with. Ważne, żeby były to domeny, a nie pełne adresy! Pole use regex zostaje odznaczone.
Tabele domyślnie zaznaczone są wszystkie, ale w razie potrzeby można wybrać tylko te, w których mają być zmienione podane wartości. To samo tyczy się kolumn w tabelach. Domyślnie pola zostawiamy puste.
Teraz nadszedł czas na przetestowanie, czy podana konfiguracja jest poprawna, a replacer dobrze zmienia adresy. W tym celu należy kliknąć przycisk dry run (dane nie zostaną podmienione). Jeśli wszystko pójdzie pomyślnie i nie zostaną zwrócone żadne błędy można kliknąć przycisk live run. Po 5 sekundach rozpocznie się właściwe zmienianie.
5. Usuń skrypt z serwera
Żeby robota została skończona właściwie – usuń wgrany katalog z serwera! W przeciwnym razie nieuprawnione osoby mogą wejść w posiadanie Twojej całej bazy danych.
Pamiętaj, że od tej pory strona będzie już dostępna pod nowym adresem!
1 krok – to najważniejszy krok, ponieważ to ratuje was od stresu:)
Jeszcze WP-CLI przychodzi z pomocą :)
Racja :) jak ktoś korzysta to nawet szybciej
Ja używam fantastycznie prostej wtyczki Duplicate która robi instalkę do nowej lokalizacji na podstawie aktualnej lokalizacji. Zero problemów, kilkanaście migracji.