Какой SQL-запрос использовать для простой операции поиска и замены
Каждый раз, когда я создаю новый веб-сайт, я сначала создаю тестовый сайт на поддомене, например, "stage.domain-name.com".
После того, как всё работает корректно, я экспортирую базу данных, открываю её в notepad++ и выполняю поиск/замену "subdomain.domain-name.com" на "domain-name.com"... и наконец импортирую её в новую базу данных для рабочего сайта.
Мой вопрос... какой SQL-запрос мне нужно выполнить, если я просто хочу сделать такую простую операцию поиска и замены во всей базе данных, используя phpMyAdmin?
-CH

Лучше всего обновить опции, записи, содержимое записей и метаданные:
UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com') WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_posts SET guid = replace(guid, 'http://olddomain.com','http://newdomain.com');
UPDATE wp_posts SET post_content = replace(post_content, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');
Также посмотрите Searching Data using phpMyAdmin and MySQL | Packt Publishing. И плагин Search RegEx отлично подходит для поиска и замены с помощью Grep во всех записях и страницах.
Обновление 16.06.2015: Использование инструмента, упомянутого в следующем предложении, гораздо лучше, так как простая замена в дампе базы данных, как показано выше, может повредить сериализованные данные. Смотрите interconnectit.com WordPress Serialized PHP Search Replace Tool. Таким образом, вы не повредите сериализованные данные и не придется запускать RegEx для содержимого записей, так как скрипт interconnect изменяет URL-адреса везде. Я часто использую этот инструмент для переноса сайтов на разные домены или просто для глобального изменения с http на https, чтобы принудительно использовать SSL без плагинов и изменить все URL-адреса в содержимом, чтобы избежать ошибок небезопасных элементов.
Редактирование 02.09.21 WP CLI также является отличным инструментом и правильно обрабатывает сериализованные данные. Смотрите https://developer.wordpress.org/cli/commands/search-replace/

Никогда не меняйте guid — даже при переходе на новый домен. Он используется для уникальной идентификации записи, так как ID может измениться, если записи экспортируются/импортируются в новую базу данных. Например, RSS-ридеры используют GUID, чтобы определить, была ли статья прочитана или нет. Изменение guid фактически приведет к повторной публикации всех ваших статей.

Если вы меняете домены, у вас просто нет выбора, и приходится менять GUID. Потеря подписчиков в RSS-ридерах — это минимальная цена, которую придется заплатить.

Несмотря на то, что GUID содержит URL, он не используется для создания ссылок (например, в меню) при обращении к записям. Поэтому не менять их — вполне допустимо.

Таблица, в которой сохраняется ваш URL, называется wp_options. Вам нужно выполнить обновление столбцов, которые содержат URL вашего сайта:
UPDATE TABLE wp_options SET option_value = "new domain" WHERE option_name = "siteurl"
UPDATE TABLE wp_options SET option_value = "new domain" WHERE option_name = "home"
Возможно, я упустил некоторые значения, но когда вы снова будете выполнять этот процесс поиска и замены, вы можете заметить значения и таблицы, которые нужно обновить, и добавить их в этот скрипт.
WordPress Codex содержит полезное руководство по изменению URL сайта, возможно, оно будет для вас более удобным: Изменение URL сайта

Разве нет способа выполнить поиск/замену во всей базе данных? Другими словами... Я заметил, например, что мне нужно заменить URL-адреса в множестве разных мест, включая медиатеку... Если бы существовал поиск/замену для всей базы данных, по сути для каждого поля, это решило бы проблему. Спасибо за помощь

Проверьте новую ссылку, которую я добавил в ответе. Думаю, это будет правильным решением.

Это отличный готовый скрипт, который я использую, и он прекрасно работает с сериализованными массивами, которые WordPress использует для хранения настроек. Просто убедитесь, что удалили его с удаленного сервера после завершения работы, так как он представляет ОГРОМНЫЙ риск для безопасности.
https://interconnectit.com/products/search-and-replace-for-wordpress-databases/

Для этого я использую WP-CLI, так как считаю его наиболее удобным, и он корректно обрабатывает сериализованные данные.
wp search-replace 'http://example.dev' 'http://example.com' --skip-columns=guid
Также есть опция, которая записывает изменения в SQL-файл вместо непосредственного изменения базы данных:
wp search-replace foo bar --export=database.sql

вам не нужно делать это, вы можете использовать относительные пути.
когда вы ссылаетесь на что-то, вместо subdomain.soemthing.com/image.jpg - используйте /image.jpg, например
таким образом вы вообще избежите этой проблемы.
в противном случае для mysql update запроса вы можете использовать
update TABLE_NAME set FIELD_NAME = replace(FIELD_NAME, ‘find this string’, ‘replace found string with this string’);

Спасибо... да, в следующий раз так и сделаю. SQL-запрос выполняет поиск и замену по всей базе данных (включая все таблицы)?

@NetConstructor.com SQL-запрос, который дала mireille выше, это общая команда MySQL для замены строки в конкретном поле конкретной таблицы. Если вы попытаетесь выполнить этот запрос в точности как он написан, он не сработает. Чтобы команда работала, вам нужно заменить TABLE_NAME и FIELD_NAME на реальные поле и таблицу, используемые WordPress.

Также учтите, что даже если вы хотите использовать относительные пути, многие части WordPress склонны автоматически вставлять полные пути. Для реальной работы с этим очень-очень полезен плагин вроде: https://wordpress.org/plugins/root-relative-urls/

Для изменения домена WordPress, что часто требуется, например, при переносе сайта с локального сервера на хостинг: Вот полный список запросов для обновления:
UPDATE wp_posts SET guid = replace(guid, 'http://olddomain.com','http://newdomain.com');
UPDATE wp_posts SET post_content = replace(post_content, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_links SET link_url = replace(link_url, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_links SET link_image = replace(link_image, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_usermeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');
/*UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com') WHERE option_name = 'home' OR option_name = 'siteurl' OR option_name = 'widget_text' OR option_name = 'dashboard_widget_options';*/
UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com');
- Также необходимо добавить другие таблицы, которые не являются стандартными для WordPress, если это необходимо.
ОБНОВЛЕНИЕ: Search Replace DB версии 3.1.0 — это удобный инструмент с интерфейсом для разработчиков, который позволяет выполнять поиск и замену в базе данных без повреждения PHP сериализованных строк или объектов.

На самом деле, вам не нужно использовать SQL-запрос, достаточно внести некоторые изменения в файлы wp-config.php и functions.php вашей темы. Ознакомьтесь с этой темой в WordPress Codex: https://codex.wordpress.org/Changing_The_Site_URL
