Массовая замена HTML тега через SQL, но при определенном условии

12
E
На сайте с 10.03.2017
Offline
15
1026

День добрый!

Подскажите, как сделать через phpMyAdmin SQL запрос на массовую замену html кода для сайта на wordpress:

Сайт на вордпресс.

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



1-й:
<blockquote>

2-й:
<blockquote>
<h5>

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

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

Суть в том, что стандартный sql запрос

UPDATE `wp_posts` SET `post_content`= REPLACE(`post_content`, 'что заменить', 'чем заменить');

не дает результата, т.к. он просто не находит связку <blockquote><h5> при запросе.

Спасибо.

SV
На сайте с 03.11.2008
Offline
1386
#1
Euirk:
Подскажите, как сделать через phpMyAdmin SQL запрос на массовую замену html кода для сайта на wordpress:

На ВП не надо лезть базу, если нет стойкого желания поломать сайт. ("не надо" - это не предложение, а указание),

Для этого нужно использовать плагины поиска-замены с поддержкой регулярок. Напр https://wordpress.org/plugins/search-regex/

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Топики помощи с ⓌordPress (https://searchengines.guru/ru/forum/1032910 ) и основы безопасности сайтов ( https://searchengines.guru/ru/forum/774117 ). *** Помощь\консультации в топиках форума - БЕСПЛАТНО. Платные услуги ( https://wp.me/P3YHjQ-3 ) - с бюджетом от 150$ ***
E
На сайте с 10.03.2017
Offline
15
#2
SeVlad:
На ВП не надо лезть базу, если нет стойкого желания поломать сайт. ("не надо" - это не предложение, а указание),
Для этого нужно использовать плагины поиска-замены с поддержкой регулярок. Напр https://wordpress.org/plugins/search-regex/

Совет, возможно, и стОящий, но, к сожалению, никак не помогающий решить изначальный вопрос....

PS search-regex - пробовал. Не ищет он связку

<blockquote> <h5> 
Или я не умею искать.

Поэтому я и задаю вопрос сообществу: как?

Потому что нужна помощь.

Спасибо

Апокалипсис
На сайте с 02.11.2008
Offline
391
#3

Euirk, есть 2 варианта:

- регулярные выражения с учетом всяких рудиментов, которые могут быть в бд,

- или же тупо вывод перехватить и в шаблоне сделать уже замену "на лету".

Записки нищего (http://zapiskinishego.ru) - мой личный блог Услуги php программиста. Очень нужна любая работа. Не покупают? Поведенческий аудит интернет-магазина за 5000 руб. (/ru/forum/990312)
SV
На сайте с 03.11.2008
Offline
1386
#4
Euirk:
Или я не умею искать.

Возможно. Регулярки надо применять.

И не надо дублировать вопросы.

apollion
На сайте с 08.01.2014
Offline
69
#5

Сделать бэкап БД. Скачать бэкап БД на комп. Поиском с заменой заменить. Импортировать отредактированную БД вместо старой.

Надежный и недорогой хостинг (http://goo.gl/ESrxwC) Еще один Надежный и недорогой хостинг (http://goo.gl/kkJDYF) Продам старый блог в ЖЖ (2004 года создания)
K
На сайте с 16.12.2009
Offline
185
#6

Регулярные выражения надо использовать однозначно. Напрямую через PhpMyAdmin лично я не полез бы править, а написал бы скриптец на PHP.

Возможно, у тебя связку <blockquote> <h5> не находит, т.к. между этими тегами могут быть самые разные "пустые" символы: пробел, табуляция, \n, \r и разные их сочетания.

Я в таких случаях проблему поиска решаю таким регулярным выражением:

<blockquote>[^<]*<h5>

freebitco.in - раздача BitCoin'ов + депозит в BTC под 4,08% (https://goo.gl/M1WZoZ)
SV
На сайте с 03.11.2008
Offline
1386
#7
Kuasar:
а написал бы скриптец на PHP.

Он УЖЕ написан. И не один. Плагинов море для этого. С удобным и понятным фейсом, контролем (демо-режим), отчётами.

O
На сайте с 29.05.2008
Offline
195
#8

Я в случаях, когда мне нужно массово отредактировать содержимое публикаций в Wordpress, делаю перебор в цикле.

В Wordpress интегрирована масса функций для обновления контента.

Писать в базу данных в обход CMS дурной тон.

Шаг 1 - делаем выборку публикаций, которые нужно отредактировать

(на данном этапе, можно, например, отсеять публикации, которые уже были отредактированы, указав дату модификации меньше за N

$wp_query = new WP_Query(array(
'post_status' => 'publish',
'post_type' => 'post'
));

Шаг 2 - модифицируем тело публикации в цикле и обновляем публикацию в базе данных используя wp_update_post.

Если нужно работать с HTML, подключаем simple_html_dom

require_once(__DIR__.DIRECTORY_SEPARATOR.'simple_html_dom.php';
while ($wp_query->have_posts()) {
$wp_query->the_post();

$content = get_the_content();

$html = str_get_html($content);

// Получаем все BLOCKQUOTE узлы в массив
if ($blockquote_nodes_array = $html->find('blockquote')) {
foreach ($blockquote_nodes_array as $blockquote_node) {
// Удаляем BLOCKQUOTE узел из HTML
$blockquote_node->outertext = '';
}
}

// Обновляем пост
wp_update_post(array(
'ID' => get_the_ID(),
'post_content' => $html->save()
));

// Очищаем память от HTML узлов
$html->clean();
}

$wp_query->wp_reset_query();

Вуаля! Без регулярных выражений и ручного вмешательства в базу данных.

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

S
На сайте с 13.10.2014
Offline
147
#9

Ну не знаю, я бы написал скрипт, а потом бахнул его кроном в самое тихое время. Когда нагрузка на сервер минимальна

SV
На сайте с 03.11.2008
Offline
1386
#10
silicoid:
Ну не знаю, я бы написал скрипт, а потом бахнул его кроном в самое тихое время. Когда нагрузка на сервер минимальна

1. Уже "всё написано до нас". См выше.

2. Нагрузка от такого не такая большая, если не применяются какие-то сложные регулярки и не сильно убогий хостинг. И делается довольно быстро (от неск сек до пары минут в зависимости от кол-ва постов и хостинга). Так что не зачем ждать 3х часов ночи :) Разве что в пик посещалки делать такого не стоит.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий