Массовая замена данных в MySQL для WordPress

Admin MySQL, WordPress 7 комментариев

Полезные команды по замене данных и текста в MySQL, которые выполняются в phpMyAdmin с помощью SQL-запросов к базе данных. Команды используются для массовой замены данных в WordPress.

Можно воспользоваться другой статьёй, если не хочется возиться с базой данных MySQL или необходимо временно изменить текст на сайте WordPress.

Команда замены в таблицах MySQL

Универсальный пример

UPDATE `Имя таблицы` SET `Имя поля` = REPLACE(Имя поля, 'строка для замены', 'чем заменяем' ) ;

Массовая замена текста в записях (статьях) WordPress

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

Замена путей для изображений в 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';

Как сделать выборку незаполненных произвольных полей

Это удобно делать, когда нужно массово заполнить произвольные поля к разным записям одновременно.

В примере ниже выведем в таблице wp_postmeta, произвольное поле premiere, которое является пустым.

SELECT * FROM wp_postmeta where meta_key = 'premiere_ru' and meta_value = ''

Скриншот из программы Sequel Pro при подобной выборке:

Разновидность запроса, которая также выведет незаполненные поля:

SELECT * FROM wp_postmeta where meta_key = 'premiere_ru' and meta_value = false

Как вывести пустое значение произвольного поля, если оно не задано вообще, я пока не понял, но можно использовать запрос wp_query для вывода постов.

Массовая замена URL сайта на WordPress

Полезные команды, когда нужно сменить адрес сайта на WordPress в базе данных MySQL. Обычно пригождается, когда переносится база данных с тестового сайта на рабочий URL.

UPDATE wp_options SET option_value = REPLACE(option_value, 'http://localhost:8888/ploshadka.net', 'https://ploshadka.net') WHERE option_name = 'home' OR option_name = 'siteurl';

UPDATE wp_posts SET post_content = REPLACE (post_content, 'http://localhost:8888/ploshadka.net', 'https://ploshadka.net');

UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'http://localhost:8888/ploshadka.net', 'https://ploshadka.net');

UPDATE wp_posts SET guid = REPLACE (guid, 'http://localhost:8888/ploshadka.net', 'https://ploshadka.net') WHERE post_type = 'attachment';

Замена URL сайта для WordPress на localhost

В обратном случае, при переносе сайта с удаленного сервера на локальный веб-сервер:

UPDATE wp_options SET option_value = REPLACE(option_value, 'https://ploshadka.net', 'http://localhost:8888/ploshadka.net') WHERE option_name = 'home' OR option_name = 'siteurl';

UPDATE wp_posts SET post_content = REPLACE (post_content, 'https://ploshadka.net', 'http://localhost:8888/ploshadka.net');

UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'https://ploshadka.net', 'http://localhost:8888/ploshadka.net');

UPDATE wp_posts SET guid = REPLACE (guid, 'https://ploshadka.net', 'http://localhost:8888/ploshadka.net') WHERE post_type = 'attachment';

Вместо моего сайта поставьте свой.

Замена старых URL на новые

Меняем старые ссылки в записях, в комментариях и настройках. В результате старый URL останется только в таблице wp_postmeta поля meta_key в качестве старого слага (_wp_old_slug). Пусть хранится на всякий случай, это никак не мешает работе сайта. Наоборот, будет переадресация в случае чего.

UPDATE wp_posts SET post_content = REPLACE (post_content, 'https://ploshadka.net/old_url/', 'https://ploshadka.net/new-url/');

UPDATE wp_comments SET comment_content = REPLACE (comment_content, 'https://ploshadka.net/old_url/', 'https://ploshadka.net/new-url/');

UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'https://ploshadka.net/old_url/', 'https://ploshadka.net/new-url/');

Очистка WordPress от ревизий

И полезная команда по очистке лишних ревизий в WordPress.

DELETE FROM `wp_posts` WHERE post_type='revision';

Не работают запросы SQL

Бывает, вы вводите правильные запросы SQL, запускаете их и ничего не меняется. Результат пишется, что изменено 0 строк. В этом случае попробуйте переписать под копирку запросы на клавиатуре. По каким-то причинам в результате копирования иногда запросы могут не работать. Возможно вставляется не тот апостроф или может какой ещё невидимый атрибут/символ.

Привет. Ты находишься на моём сайте. Я разработчик. Здесь я делюсь своими наработками и знаниями. Спрашивай в комментариях, если тебе что-то не понятно или пиши, если есть что добавить.

Если вам пригодилась информация, вы можете поблагодарить автора сайта символическим пожертвованием:

Комментарии к статье “Массовая замена данных в MySQL для WordPress” (7)

  • Аватар
    Антон
    12.02.2019 в 20:22

    Здравствуйте. А если мне необходимо в моих записях изменить текст, который расположен в нескольких строках, например это:

    <!-- /wp:table -->
    <!-- wp:paragraph -->

    нужно изменить на это:

    <!-- wp:paragraph -->

    Как это можно сделать с помощью SQL запроса?
    Спасибо.

    • Admin
      Admin
      Автор записи
      16.02.2019 в 11:47

      В первое значение поставьте искомый запрос , а второе оставьте пустым.

      UPDATE wp_posts SET post_content = REPLACE (post_content, '<!-- /wp:table -->', '');
  • Аватар
    Александр
    18.02.2019 в 04:59

    День добрый!

    Подскажите, как сделать:

    Есть много постов, в которых есть 2 похожих элемента:
    1-й:

    <blockquote>

    2-й:

    <blockquote>
    Нужно заменить <blockquote> на <blockquote>,

    НО

     только во втором варианте (т.е. когда <blockquote>)

    Как это сделать?

    Поиск по БД элемента

    <blockquote>

    ничего оне находит, т.к. они, судя по всему, находятся на разных строчках.

    Спасибо.

    • Admin
      Admin
      Автор записи
      18.02.2019 в 09:14

      По комментарию ничего не понятно. Как будто хотите одни и те же элементы поменять. Возможно код потерялся. Надо было его обрамить тегами code.

      • Аватар
        Александр
        18.02.2019 в 09:36

        Да, часть сообщения просто потерялась. Пробую еще раз. Спасибо.

        Есть много постов, в которых есть 2 похожих элемента:
        1-й:
         <blockquote>

        2-й:
        <blockquote>
        <h5>

        Нужно заменить <blockquote> на <blockquote class="warning">, НО только во втором варианте (т.е. когда <blockquote>
        <h5>)

        Как это сделать?

        Поиск по БД элемента
        <blockquote>
        <h5>
        ничего оне находит, т.к. 2 тега, судя по всему, находятся на разных строчках.

        Спасибо

        • Admin
          Admin
          Автор записи
          24.02.2019 в 14:11

          Сходу не скажу, надо гуглить. Как вариант зайти в БД и поискать все значения blockquote. Посмотреть как они там записаны. Это вбить в строку поиска для замены.

  • Аватар
    Евгений
    01.07.2019 в 13:16

    Классная статья. Replace рулит. После него, особенно, в options гарантированно все слетит к чертям. Автор, пиши про сериализованные данные!!!

Добавить комментарий

Напишите свой комментарий, если вам есть что добавить/поправить/спросить по теме текущей статьи: "Массовая замена данных в MySQL для WordPress"
Если вам нужно добавить участок кода ставьте его между тегами <code></code>