Я пытаюсь найти способ очистить старые сообщения из базы данных WordPress с помощью команды sql.
UPDATE `wpw8_posts` SET `post_content` = REGEXP_REPLACE(`post_content`, '<span id = ".*?" class = ".*?" style = ".*?">.*?</span>', '<span>.*?</span>');
UPDATE `wpw8_posts` SET `post_content` = REGEXP_REPLACE(`post_content`, '<h2 id = ".*?" class = ".*?" style = ".*?">.*?</h2>', '<h2>.*?</h2>');
UPDATE `wpw8_posts` SET `post_content` = REGEXP_REPLACE(`post_content`, '<p id = ".*?" class = ".*?" style = ".*?">.*?</p>', '<p>.*?</p>');
Что мне нужно, так это найти и удалить любой случайный стиль, идентификатор или класс, чтобы убедиться, что код очищен.
Существующий:
<span id = "geruhgk" class = "fkhdge" style = "gjfjgr">content</span>
<p class = "fkhdge" style = "gjfjgr" id = "geruhgk">content</p>
<h2 class = "fkhdge" id = "geruhgk" style = "gjfjgr">content</h2>
Ожидал:
<span>content</span>
<p>content</p>
<h2>content</h2>
Я попробовал следующую команду sql:
UPDATE `wp_posts` SET `post_content` = REGEXP_REPLACE(post_content,'<div class = "(?s)(.*?)">(?s)(.*?)</div>','<div>(?s)(.*?)</div>')
Это не сработало. Я не знаю, как написать REGEXP. Что мне нужно отредактировать для поиска, например, случайных классов, идентификаторов или стилей, а также как искать и удалять старые идентификаторы, классы, стили для всех сообщений в базе данных WordPress.
из php он может сломать sute с сообщениями, а затем 75k, так что лучше с mysql, может ли тот же помочь с этим
Привет @ẪĦmẻḓMøĦẫmẻḓ Пожалуйста, посмотрите мой комментарий здесь и дайте мне знать, если это поможет. Спасибо.
404 Not Found _ Пожалуйста, прочтите команду sql
ОБНОВЛЕНИЕ wp_posts НАБОР post_content = REGEXP_REPLACE( post_content, '/<span(.?)((id=[^ ]+|class=[^ ]+|style=[^ ]+)\s)+(.?)\> (.?)</span\>/', '<span$1$4>$5</span>'); нужно войти в систему, чтобы показать код, протестировать и сказать вам
я пробую это (ОБНОВЛЕНИЕ wpw8_posts SET post_content = REGEXP_REPLACE( post_content, '/<oo(.?)((id=[^ ]+|class=[^ ]+|style=[^ ]+)\s)+(. ?)\>(.?)</oo\>/', '<oo$1$4>$5</oo>');) ничего не меняется с постом <oo id = "gduhu uhcuhc gciuhiu" class = " hdfkjhgk hdfkjghk" style = "color:red"></oo>, чтобы протестировать < 0 затронутых строк. (Запрос занял 3,0054 секунды.)
пожалуйста, помогите с этим кодом, который не работает UPDATE wpw8_posts SET post_content = REGEXP_REPLACE( post_content, '<oo(.?)((id=[^ ]+|class=[^ ]+|style=[^ ]+)\s) +(.?)\>(.?)</oo\>', '<oo$1$4>$5</oo>');






MariaDB использует символ обратной косой черты (\), а не знак доллара ($) в качестве символа обратной ссылки регулярного выражения. Я предполагаю, что веб-хост, который вы используете с phpMyAdmin, использует базу данных MariaDB. Если это правда, вы можете попробовать это:
UPDATE `wpw8_posts`
SET `post_content` = REGEXP_REPLACE(`post_content`, '<(span|p|h2) ((id|class|style) = "[^>]+")+', '<\\1');
Вы можете добавить множество имен HTML-тегов в список span, p и h2, чтобы обновить несколько тегов.
спасибо, мне нужно больше тестов, потому что html-кода много, поэтому я не знаю, если что-то пошло не так, если я использую его для 70 000 сообщений.
я не тестирую UPDATE wpw8_posts SET post_content = REGEXP_REPLACE(post_content, '<(span|p|h1|h2|h3|h4|h5|h6|strong|i|em|dd|dt|code|small|video|col |colgroup|pre|hr|br|ul|li|ol|table|tbody|tr|td|th|thead|tfoot|iframe|img|a) ((id|class|style|dir |data-aa-component|alt|width|height|title) = "[^>]+")+', '<\\1'); но нужно больше времени для большего количества тестов
окончательный код для тех, у кого такая же проблема ОБНОВЛЕНИЕ wpw8_posts SET post_content = REGEXP_REPLACE(post_content, '<(span|p|h1|h2|h3|h4|h5|h6|strong|i|em|dd|dt|code|small|vid eo|col|colgroup|pre|hr|br|ul|li|ol|table|tbody|tr|td|th|thead|tfoot|iframe|img|a) ((id|class |style|dir|data-aa-component|alt|width|height|title|rowspan|colspan|data-row|itemrop|itemscope|itemtype) = "[^>]+") +', '<\\1'); спасибо @kofeigen
Разбор HTML с помощью регулярных выражений немного сложен, и я не знаю хорошего решения вашей проблемы. Я бы предложил написать PHP-скрипт и вместо этого использовать библиотеку парсера HTML. Вы можете использовать
$wpdbили внутренние функции wordpressget_post/sиupdate_postдля получения и обновления содержимого сообщений.