Przejdź do treści
Narzędzia

SQL do wyszukiwania i zamiany

Zmień adres URL witryny bez uszkadzania danych serializowanych

Działa w Twojej przeglądarce. Nic nie jest wysyłane.

Zmiana

Przeczytaj to, zanim cokolwiek uruchomisz

WordPress przechowuje wiele opcji jako ciągi znaków w formacie PHP-serialized, a taki serializowany ciąg zapisuje własną długość w bajtach — s:19:"http://old-site.com". Zwykła podmiana w SQL zmienia tekst, ale nie długość, więc PHP nie potrafi już zdeserializować wiersza. Nie zgłasza przy tym błędu. Wartość po prostu po cichu staje się pusta.

Co tracisz: konfigurację widżetów, modyfikacje motywu i większość ustawień wtyczek. Zwykle zauważasz to dopiero po kilku dniach, a wtedy kopii zapasowej, którą byś przywrócił, też już nie ma.

Właśnie dlatego zapytania poniżej celowo nie ruszają tabeli wp_options.

Co przenosisz?
search-replace.sql

Najpierw wykonaj kopię zapasową bazy danych. Nie „rozważ jej wykonanie” — po prostu ją zrób. Dla polecenia UPDATE nie ma cofania.

O narzędziu SQL do wyszukiwania i zamiany

Naiwne wyszukiwanie i zamiana w bazie danych WordPressa przez SQL psuje każdą serializowaną opcję, której dotknie, ponieważ zapisana długość ciągu przestaje się zgadzać. To narzędzie generuje zapytania, które są bezpieczne, i wyjaśnia dokładnie, które takie nie są.

FAQ

Pytania

Czy mogę zmienić adres URL mojej strony WordPress przez wyszukiwanie i zamianę w SQL?

Nie bezpiecznie i to najczęściej powtarzana zła rada w świecie WordPress. Wiele opcji jest przechowywanych jako serializowane ciągi PHP, które zapisują własną długość w bajtach. Zwykła zamiana w SQL zmienia tekst, ale nie długość, więc PHP po cichu nie potrafi odserializować wiersza i wartość po prostu znika — zabierając ze sobą ustawienia widgetów, modyfikacje szablonu i konfigurację wtyczek.

Czego powinienem użyć zamiast tego?

WP-CLI: najpierw „wp search-replace stary nowy --all-tables --dry-run”, potem bez --dry-run. Rozumie serializację i poprawnie przepisuje prefiksy długości. Jeśli nie masz dostępu do CLI, wtyczka Better Search Replace robi to samo z poziomu panelu.

Czy powinienem aktualizować kolumnę GUID?

Nie. GUID to stały, unikalny identyfikator wpisu, a nie link, i czytniki kanałów się nim posługują. Jego przepisanie sprawi, że każdy subskrybent zobaczy każdy stary wpis jako zupełnie nowy. Dokumentacja WordPress wprost mówi, żeby go nie zmieniać.