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

Admin MySQL, WordPress

Полезные команды по замене данных и текста в 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” (14)

  • Антон
    12.02.2019 в 20:22

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

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

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

    <!-- wp:paragraph -->

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

    • 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
      Автор записи
      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
          Автор записи
          24.02.2019 в 14:11

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

  • Евгений
    01.07.2019 в 13:16

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

  • Олег
    13.11.2020 в 12:36

    Приветствую. Не подскажите, как массово черновики записей изменить на отложенную публикацию?

  • Олег
    26.10.2021 в 00:17

    Приветствую! Подскажите, как можно массово изменить год в Н1 для сайта на WP на актуальный?

    • Admin
      Автор записи
      28.10.2021 в 14:12

      На подобные вопросы без конкретики не ответить.

      Какой год, в каком H1, почему год не актуальный и т.д. все это из вашего сообщения не понятно.

      • Олег
        05.12.2021 в 23:02

        Прошу прощения за задержку, видимо уведомления в спам ушло.

        Есть записи на сайте, где в заголовках в Н1, Н2, и Н3 фигурируют старые года в конце. Например Исковое заявление образец 2020, или Как заменить водительское удостоверение в 2019 году. Получается год, нужно поменять на 2022.

        • Admin
          Автор записи
          08.12.2021 в 16:18

          Это или в редактировании записей надо править (в 99% случаев). Или в коде сайта поищите.

  • Lexx Lissker
    14.09.2022 в 16:42

    Здравствуйте. Столкнулся с проблемой. На сайте 74 000 сгенерированных страниц. На них есть блок с 6ю ссылками. На одной половине страниц ссылки находятся в блоках с картинками. На другой просто ссылки и 1 косячный блок, где должна быть ссылка, но выходит только текст «gruz_links».
    Вопрос — Как можно заменить второй вариант, где блок с косячной ссылкой на первый вариант? Через MySql?
    Вопрос 2 — Можно ли ОБА варианта блока, заменить на другой вариант, где используется другой дизайн, но ссылки остаются?

Добавить комментарий для Lexx Lissker Отменить ответ

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