Какой SQL-запрос сделать простым найти и заменить

20

Каждый раз, когда я создаю новый веб-сайт, я сначала создаю промежуточный сайт на поддомене, например «stage.domain-name.com».

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

У меня вопрос ... какой SQL-запрос мне нужно будет выполнить, если я просто хочу выполнить этот простой поиск / замену всей базы данных с помощью phpmyadmin?

-СН

NetConstructor.com
источник
Если вы не знакомы с запросами, попробуйте плагин «Поиск и замена», wordpress.org/extend/plugins/search-and-replace
t31os
Почему бы не использовать функциональность WordPress для обновления URL? codex.wordpress.org/Moving_WordPress детализирует все
Alex Older
Для этого есть плагин. Это позволяет комфортно использовать бэкэнд, а также заменяет URL-адрес в пост-контенте и некоторых других полях, если вы хотите: wordpress.org/plugins/better-search-replace
simonthesorcerer,

Ответы:

13

Таблица, в которой сохранен ваш 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-адреса сайта

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

Лучше всего делать опции, посты, публиковать контент и публиковать мета:

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');

Также см. Поиск данных с использованием phpMyAdmin и MySQL | Packt Publishing.И Search RegEx - это хороший плагин для WP, позволяющий выполнять поиск и замену на Grep по всем сообщениям и страницам.

Обновление 16.06.2015: Использование инструмента, связанного в следующем предложении, намного лучше, так как простой поиск / замена, как описано выше в дампе базы данных, сломает сериализованные данные. Смотрите interconnectit.com WordPress Сериализованный PHP инструмент поиска замены. Таким образом, вы не нарушаете сериализованные данные и не должны запускать RegEx для содержимого публикации, так как сценарий межсоединения везде меняет URL-адреса. Я постоянно использую этот инструмент для переноса сайтов в разные домены или просто для глобального изменения http: https, чтобы заставить SSL без плагинов и изменять все URL в контенте, чтобы избежать ошибок небезопасных элементов.

markratledge
источник
2
Никогда не меняйте guid - даже если переходите на новый домен. Он используется для уникальной идентификации сообщения, так как идентификатор может измениться, если сообщения экспортируются / импортируются в новую базу данных. Прежде всего, читатели RSS будут использовать GUID, чтобы узнать, была ли прочитана конкретная статья или нет. Изменение guid будет эффективно переиздавать все ваши статьи.
Тейлор Дьюи
@taylordewey сказал: «Никогда не меняй гид ...» Мусор.
markratledge
1
@songdogtech Хотите объяснить, почему это мусор?
Ше
1
Зачем нужно менять GUID?
Кайзер
1
Это не будет работать для сериализованных данных. Это может полностью нарушить некоторые настройки темы. Действительно используйте такой инструмент, как Interconnect / IT.
Кристиан Лескиер
9

Это отличный сценарий, который я использую, и он прекрасно работает с сериализованными массивами, которые WP использует для хранения опций. Просто убедитесь, что удалили его с удаленного сервера, когда закончите, потому что это ОГРОМНАЯ угроза безопасности.

https://interconnectit.com/products/search-and-replace-for-wordpress-databases/

lancemonotone
источник
2
Я не знаю, почему я был -1 Этот скрипт намного лучше, чем оператор SQL. Обратная связь, пожалуйста?
ланцемонотон
1
инструмент, который могут использовать люди, которые не знают sql, огорчает тех, кто пишет в sql
Jon
4

Для этого я использую WP-CLI, потому что считаю его самым простым и он заботится о сериализованных данных.

wp search-replace 'http://example.dev' 'http://example.com' --skip-columns=guid

Существует также опция, которая записывает ваши изменения в файл SQL вместо манипулирования реальной базой данных:

wp search-replace foo bar --export=database.sql

Ян Бек
источник
безусловно, самое надежное и быстрое решение. wp-
cli
3

вам не нужно этого делать, вы можете использовать относительные пути.

когда вы связываете что-то вместо subdomain.soemthing.com/image.jpg - используйте, например, /image.jpg

как это вы не столкнетесь с проблемой в первую очередь.

в противном случае для оператора обновления MySQL вы можете использовать

update TABLE_NAME set FIELD_NAME = replace(FIELD_NAME, find this string’, replace found string with this string’);
Мирей Раад
источник
Спасибо ... да, я сделаю это в следующий раз. Оператор SQL выполняет поиск замены для всей базы данных (включая все таблицы)?
NetConstructor.com
@ NetConstructor.com Выражение SQL, которое mireille дал вам выше, является общей командой MySQL для замены строки в определенном поле в определенной таблице. Если вы попытаетесь выполнить это утверждение в точности так, как оно было написано, оно не сработает. Чтобы эта команда работала, вам нужно изменить TABLE_NAME & FIELD_NAME на реальное поле и таблицу, используемые WordPress.
Манзабар
Также обратите внимание, что даже если вы хотите использовать относительные пути, многие части WordPress имеют тенденцию автоматически вставлять полные пути. Чтобы действительно заставить это работать, плагин вроде: wordpress.org/plugins/root-relative-urls очень, очень полезен
benz001
2

Чтобы изменить домен WordPress, в чем мы часто нуждаемся, может быть, чтобы сайт работал с localhost: это полный список запросов на обновление:

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');
  • Мы также должны добавить другие таблицы, которые не являются стандартными с WP, если это необходимо.

ОБНОВЛЕНИЕ: Search Replace DB версии 3.1.0 - это удобный интерфейсный инструмент для разработчиков, который позволяет выполнять действия поиска / замены в базе данных, не повреждая сериализованные строки или объекты PHP.

Реза Мамун
источник
2
Это не будет работать для сериализованных данных. Это может полностью нарушить настройку темы.
Кристиан Лескуйер
-1

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

Меца
источник
1
Это не правильно. К сожалению, WordPress хранит некоторые URL в базе данных в виде текста.
s_ha_dum