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.

The change

Read this before you run anything

WordPress stores many options as PHP-serialized strings, and a serialized string records its own byte length — s:19:"http://old-site.com". A plain SQL replace changes the text but not the length, so PHP can no longer unserialize the row. It does not error. The value just silently becomes empty.

What you lose: widget configuration, theme mods, and most plugin settings. Usually you do not notice until days later, and by then the backup you would have restored is gone too.

This is why the queries below deliberately do not touch wp_options.

What are you moving?
search-replace.sql

Take a database backup first. Not 'consider taking one' — take one. There is no undo for an UPDATE.

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ć.