Перейти к содержимому
Инструменты

SQL для поиска и замены

Смените URL сайта, не повредив сериализованные данные

Работает в вашем браузере. Ничего не загружается.

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.

Об инструменте «SQL для поиска и замены»

Наивный поиск и замена через SQL в базе данных WordPress ломает каждую сериализованную опцию, которой касается, потому что сохранённая длина строки перестаёт совпадать. Инструмент генерирует безопасные запросы и объясняет, какие именно небезопасны.

Похожие

Другие инструменты, которые могут пригодиться

FAQ

Вопросы

Можно ли сменить URL сайта WordPress через SQL-поиск и замену?

Безопасно — нет, и это самый растиражированный плохой совет в WordPress. Многие опции хранятся как PHP-сериализованные строки, которые записывают собственную длину в байтах. Обычная SQL-замена меняет текст, но не длину, поэтому PHP молча не может разобрать строку, и значение просто исчезает — вместе с настройками виджетов, правками темы и конфигом плагинов.

Что использовать вместо этого?

WP-CLI: сначала «wp search-replace old new --all-tables --dry-run», затем без --dry-run. Он понимает сериализацию и корректно переписывает префиксы длины. Если доступа к CLI нет, плагин Better Search Replace делает то же самое из админки.

Стоит ли обновлять столбец GUID?

Нет. GUID — это постоянный уникальный идентификатор записи, а не ссылка, и агрегаторы лент ориентируются на него. Переписав его, вы заставите каждого подписчика увидеть все старые записи как новые. Документация WordPress прямо говорит его не менять.