Как удалить содержимое тега через mysql?

Приветствую! В записях выводятся два заголовка h1 (один формируется из <?php the_title(); ?> а второй когда-то прописывался вручную).

<h1 class="single__title" itemprop="headline">Кофейное обертывание</h1>
<h1 itemprop="name" class="zaglavie">Кофейное обертывание</h1>


Подскажите как массово удалить заголовок h1 с классом "zaglavie" через mysql?
  • Вопрос задан
  • 392 просмотра
Решения вопроса 1
erge
@erge
Примус починяю
1. версия MySQL ???
2. Александр Пунченко, а как же
itemprop="name"
??

Можно удалить используя регулярные выражения, если ваш MySQL их поддерживает.
Если у вас MySQL 8
то можно так:

UPDATE wp_posts
  SET post_content = REGEXP_REPLACE(
    post_content,
    '<h1[^>]+>[a-zа-я[:space:][:digit:][:punct:]]+</h1>[[:space:]]*',
    ''
    );

PS: удалит ВСЕ тэги h1 с содержимым.
если надо иначе поправьте.


пример выполнения на dbfiddle.

см. MySQL Regular Expressions

Если нет, то все будет долго и муторно...

примерно так...
- читаете запись.
- определяете строчными функциями где начинается тег в тексте, где заканчивается.
- вырезаете.
- записываете
все это можно реализовать в хранимой процедуре.
либо на внешнем языке и тогда второй-третий пункт так же на регулярках сделать.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
kores
@kores
Помог ответ? Отметь решением!
Александр Пунченко, в mysql не подскажу, но в принципе можно циклом перебрать и с помощью регулярки сделать
вот непосредственно пример регулярки, протестил быстренько на phptester.net - работает...
$str = '<h1 class="single__title" itemprop="headline">Кофейное обертывание</h1>
	<h1 itemprop="name" class="zaglavie">Кофейное обертывание</h1>';

	$result = preg_replace('#<h1 itemprop="name" class="zaglavie">([\s\S]*?)</h1>#', '$1', $str);

	echo $result;


По сути остается только запустить цикл и в момент цикла сделать обновление, примерно так

// Создаем массив данных
$my_post = array();
$my_post['ID'] = 37; // Вставляй сюда в момент цикла ID записи
$my_post['post_content'] = 'Здесь новый контент записи'; // Вставляй сюда данные из переменной $result

// Обновляем данные в БД
wp_update_post( wp_slash($my_post) );
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы