Короткая заметка о том, как в один запрос массово заменить определенное слово/фразу или часть текста в MySQL.
Универсальный пример
UPDATE `Имя таблицы` SET `Имя поля` = REPLACE(Имя поля, 'строка для замены', 'чем заменяем' ) ;
Массовая замена текста в записях (статьях) WordPress
- 1. Массовая замена текста в записях (статьях) WordPress
- 2. Замена путей для изображений в MySQL
- 3. Массовая замена (изменение) имени автора в WordPress
- 4. Замена произвольных полей в MySQL
- 5. Массовая замена URL сайта на WordPress
- 6. Замена URL сайта для WordPress на localhost
- 7. Замена старых URL на новые
- 8. SEO перелинковка
- 9. Очистка WordPress от ревизий
- 10. Не работают запросы SQL
UPDATE wp_posts SET post_content = REPLACE (post_content, 'Текст который нужно заменить', 'новый текст');
Пример. Как-то мне понадобилось заменить во всех текстах тег blockquote на теги div. Для этого потребовалось ввести следующую команду.
UPDATE wp_posts SET post_content = REPLACE (post_content, '<blockquote>', '<div class="highlight">');
UPDATE wp_posts SET post_content = REPLACE (post_content, '</blockquote>', '</div>');
Вот например пример по замене номера телефона в статьях с условием:
UPDATE articles SET text = REPLACE(text, '8-927-123-45-67', '8-927-123-76-54') WHERE text LIKE '%8-927-123-45-67%'
WHERE – дополнительно условия для расширения логики поиска
Предварительно посмотреть что мы меняем
SELECT created_by FROM `table_Name` WHERE created_by like "432"
Замена путей для изображений в MySQL
UPDATE wp_posts SET post_content = REPLACE (post_content, 'https://www.my_site.ru/images/old/', 'https://www.my_site.ru/images/new/');
Массовая замена (изменение) имени автора в WordPress
У вас могут быть и другие таблицы, где фигурирует ваше имя. Нужно смотреть по плагинам, где используются имя автора блога (или любой другой). Например, в примере ниже меняется автор во всех комментариях, рейтингах и некоторых других таблицах.
UPDATE `wp_comments` SET `comment_author` = REPLACE(comment_author, 'Old_name', 'New_name' ) ;
UPDATE `wp_ratings` SET `rating_username` = REPLACE(rating_username, 'Old_name', 'New_name' ) ;
UPDATE `wp_relevanssi` SET `term` = REPLACE(term, 'Old_name', 'New_name' ) ;
UPDATE `wp_bp_xprofile_data` SET `value` = REPLACE(value, 'Old_name', 'New_name' ) ;
Замена произвольных полей в MySQL
Для замены произвольного поля ‘premiere_ru’ в таблице wp_postmeta, где значения «—» нужно поменять на пустые:
UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, '--', '') where meta_key = 'premiere_ru';
Массовая замена URL сайта на WordPress
Полезные команды, когда нужно сменить адрес сайта на WordPress в базе данных MySQL. Обычно пригождается, когда переносится база данных с тестового сайта на рабочий
URL.UPDATE wp_options SET option_value = REPLACE(option_value, 'http://localhost:8888/obu4alka.ru', 'https://obu4alka.ru') WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_posts SET post_content = REPLACE (post_content, 'http://localhost:8888/obu4alka.ru', 'https://obu4alka.ru');
UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'http://localhost:8888/obu4alka.ru', 'https://obu4alka.ru');
UPDATE wp_posts SET guid = REPLACE (guid, 'http://localhost:8888/obu4alka.ru', 'https://obu4alka.ru') WHERE post_type = 'attachment';
Замена URL сайта для WordPress на localhost
В обратном случае, при переносе сайта с удаленного сервера на локальный веб-сервер:
UPDATE wp_options SET option_value = REPLACE(option_value, 'https://obu4alka.ru', 'http://localhost:8888/obu4alka.ru') WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_posts SET post_content = REPLACE (post_content, 'https://obu4alka.ru', 'http://localhost:8888/obu4alka.ru');
UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'https://obu4alka.ru', 'http://localhost:8888/obu4alka.ru');
UPDATE wp_posts SET guid = REPLACE (guid, 'https://obu4alka.ru', 'http://localhost:8888/obu4alka.ru') WHERE post_type = 'attachment';
Вместо моего сайта поставьте свой.
Замена старых URL на новые
Меняем старые ссылки в записях, в комментариях и настройках. В результате старый URL останется только в таблице wp_postmeta поля meta_key в качестве старого слага (_wp_old_slug). Пусть хранится на всякий случай, это никак не мешает работе сайта. Наоборот, будет переадресация в случае чего.
UPDATE wp_posts SET post_content = REPLACE (post_content, 'https://obu4alka.ru/old_url/', 'https://obu4alka.ru/new-url/');
UPDATE wp_comments SET comment_content = REPLACE (comment_content, 'https://obu4alka.ru/old_url/', 'https://obu4alka.ru/new-url/');
UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'https://obu4alka.ru/old_url/', 'https://obu4alka.ru/new-url/');
SEO перелинковка
Кстати, данный оператор можно использовать для создания автоматической перелинковки статей…
СЕО- это, блин, не таинство, доступное избранным, мы тоже это могём!
Стоп! Я сказал автоматическую перелинковку? Нет, не так. Правильнее будет- полуавтоматическую перелинковку, то есть слова нужно будет вводить ручками. Но это уже кое-что!
От слов- к делу. Небольшой пример. Допустим, у нашей статьи в базе id 20, и мы хотим, чтобы на нее были ссылки со всех других статей. Реализация- проста до безобразия. Для начала нам нужно определиться с ключевым словом. Например, это слово “функция”. Что ж, наш запрос будет выглядеть примерно так:
$search = "функция";
$replace = "<a href=\'articles.php?article_id=20\' title=\'функция\'>функция</a>";
mysql_query("UPDATE table_articles SET article = REPLACE(article, '".$search."', '".$replace."') WHERE id != '20'");
Теперь у нас во всех статьях будет ссылка на нужную статью. И наоборот, если нам нужно лишь в одной статье поставить ссылку или ссылки на другие- просто меняем условие, выбирая только одну статью (соответственно, меняем адрес ссылки):
$search = "функция";
$replace = "<a href=\'articles.php?article_id=10\' title=\'функция\'>функция</a>";
mysql_query("UPDATE table_articles SET article = REPLACE(article, '".$search."', '".$replace."') WHERE id = '20'");
Это- не руководство к действию. Это идея, информация к размышлению.
Очистка WordPress от ревизий
И полезная команда по очистке лишних ревизий в WordPress.
DELETE FROM `wp_posts` WHERE post_type='revision';
Не работают запросы SQL
Бывает, вы вводите правильные запросы SQL, запускаете их и ничего не меняется. Результат пишется, что изменено 0 строк. В этом случае попробуйте переписать под копирку запросы на клавиатуре. По каким-то причинам в результате копирования иногда запросы могут не работать. Возможно вставляется не тот апостроф или может какой ещё невидимый атрибут/символ.