Korzystałeś kiedyś z wp-cli? To narzędzie jest jak szwajcarski scyzoryk dla każdego administratora WordPress. Przykładowo, jeżeli potrzebujesz zmienić w bazie danych twojej strony opartej o WordPress jakiś ciąg znaków – dajmy na to adres (URL) witryny – co robisz? Masz kilka możliwości. Postaram Cię namówić na wykorzystanie w tym celu wp-cli i opisać dokładnie jak to wykonać – na prawdziwym przykładzie z wczoraj. Ale najpierw… dwie metody, których nie używam :).
Spis treści
Jak NIE podmieniać ciągów znaków w bazach danych
Będąc młodą naiwną lekarką… a nie czekaj… miało być „młodym niedoświadczonym twórcą stron”. Wtedy po prostu robiłem dump bazy danych, w Notepad++ wykonywałem „wyszukaj i zamień” i wrzucałem bazę z powrotem na serwer. Parę razy nawet się udało. Niestety – kolejne wersje Drupal i WordPress wprowadziły serializację danych w polach tekstowych. Nie wchodząc w szczegóły oznaczało to, że nie wystarczyło już podmieniać ciągów znaków. Należało jeszcze poprawić liczbę znaków poprawianego pola, przechowywaną zwykle gdzieś obok. Notepad++ poszedł w odstawkę.
Jak podmieniać ciągi znaków kiedy nie mamy dostępu do SSH
Przez kolejne lata (w czasach kiedy mało kto słyszał o SSH i WP-CLI) używałem skryptu Search and replace DB, który (zazwyczaj) poprawnie obsługiwał serializację danych dla WordPress czy Drupal. Nadal nim się posługuję, jeśli nie mam dostępu do wiersza poleceń.
Dlaczego używam WP-CLI
Kiedy poznałem WP-CLI i SSH to cała moja miłość do Search and replace DB minęła. Jeśli tylko mogę podmieniam adresy (i nie tylko) w bazie WordPress za pomocą tego narzędzia. Dlaczego? Jest to rozwiązanie któremu bardziej ufam. Wp-cli jest rozwijany przez twórców WordPress. Nie wymaga podawania poświadczeń do bazy danych – potrafi je „wyczytać” z plików konfiguracyjnych. Nie zgłasza też ostrzeżeń i błędów związanych z serializacją – np. przy wtyczkach takich jak Yoast – tak jak robi to wspomniany Search and Replace DB (Inna sprawa, czy to oznacza, że poprawnie dokonuje konwersji czy tylko milczy o problemach – do sprawdzenia :)).
Jak użyć WP-CLI do zmiany adresu (URL) strony opartej o WordPress
Po pierwsze Przejdź do katalogu głównego WordPress a którego URL chcesz zmienić. Powinieneś być w tym katalogu w którym widać plik wp-config.php.
Przykładowo – jeśli po zalogowaniu do swojego konta jesteś w katalogu domowym (oznaczanym w linuksie znakiem tyldy, czyli ~) a wp-config.php jest w katalogu ~/domains/mojastrona.pl/public_html wydajesz komendę:
cd domains/domains/mojastrona.pl/public_html
(składnia cd ~/domains/domains/mojastrona też będzie poprawna – co więcej zapewni nam przejście do właściwego katalogu nawet jeśli nie jesteśmy w folderze domowym.)
Następnie wyświetlamy zawartość katalogu – na przykład z pomocą komendy ls -l
(Na screenie jest to komenda ll, ale tylko dlatego, że na większości hostingów jest to popularny alias do komendy ls -l)
Możemy naocznie przekonać się, czy jesteś we właściwym folderze:
Po drugie Wykonaj kopię zapasową bazy danych za pomocą
wp db eksport
Utworzy się plik z nazwą bazy danych, bieżącą datą i końcówką .sql. Jeśli zobaczysz jakiś błąd to może oznaczać problemy z wykonaniem reszty tego poradnika – napisz w komentarzach jaki błąd dostajesz.
Nie zapomnij przenieść tego pliku gdzieś poza katalog dostępny z Internetu. Jako, że w głównym katalogu nie powinno być plików sql możesz wpisać:
mv *.sql ../
Co przeniesie wszystkie pliki kończące się na .sql o katalog wyżej. Na zrzucie ekranu przenoszę jeden konkretny plik.
Po trzecie Wykorzystaj komendę wp search-replace z odpowiednimi parametrami. Służy ona do podmiany ciągów znaków w bazie danych.
Pierwsze wykonanie tej komendy proponuję zrobić z dopiskiem dry-run. Dzięki temu żadne dane w bazie nie zostaną zmienione ale zobaczysz tabelę która prezentuje ilość zmian w poszczególnych tabelach i kolumnach jaka zostanie wykonana.
Poniższy przykład zaadoptuj do swojej sytuacji – dużo innych znajdziesz na oficjalnej stronie tej komendy.
wp search-replace 'mojastrona.pl' 'test.mojastrona.pl' --dry-run
Powyższe polecenie wyszuka ciągi znaków zawierające mojastrona.pl i pokaże liczbę potencjalnych zamian w poszczególnych tabelach i kolumnach twojej strony.
Jeśli nie widzisz nic niepokojącego to pora na uruchomienie tej komendy bez dopisku dry-run.
Jeśli niepokoją cię (a powinny) zmiany w jakiejś kolumnie, na przykład user_email w tabeli wp_users:
to po pierwsze gratuluję dobrego oka i nie przyjmowania wszystkich tutoriali bezrefleksyjnie, po drugie możesz ominąć tę tabelę czy kolumnę korzystając ze składni:
wp search-replace 'mojastrona.pl' 'test.mojastrona.pl' --skip-tables=wp_users
albo
wp search-replace 'mojastrona.pl' 'test.mojastrona.pl' --skip-columns=user_email
Jeśli potrzebujesz ominąć więcej niż jedną tabele lub kolumnę – podajesz je po przecinkach.
Po wykonaniu zmian w bazie powinien pojawić się komunikat podobny do poniższego:
Pozostaje sprawdzić, czy strona działa pod nowym adresem. Powinna – o ile wykonałeś też całą resztę roboty (głównie konfigurację hostingu i wpisy w DNS).
Jeśli wszystko działa – brawo Ty!