Intereting Posts
Как я могу получить_контент в пользовательском ходоке? Переопределить постформаты в дочерней теме Как отобразить wp_list_categories на div вместо li? Перевод плагина внутри темы Обновить значение пользовательской таксономии для публикации на основе настраиваемого поля даты Как вставить новые значения в WordPress пользователя Имя и поля Фамилия через БД Постоянная ссылка установлена ​​на /% postname% /, но все еще есть ссылки, индексированные в форме? P = x Вызов двух разных функций.js в зависимости от страницы Включить несколько идентификаторов страниц в цикле Как просмотреть все сообщения (на сайте, а не admin), которые не классифицированы? Использовать короткие коды в пользовательских метабоксах с помощью wp_editor? Uncaught ReferenceError: switchEditors не определен работа с большим выходом HTML через код плагина Отображение списка пользователей ACF Обнаружение, когда TinyMCE «готов»,

Удаление любых и всех встроенных стилей из поля the_content ()

Для одного из моих текущих проектов мне пришлось перенести блогпосты со старого сайта WordPress в мой проект.

Все прошло гладко, пока я не увидел, что все сообщения были скопированы из Word, оставив это почти в каждом абзаце:

<span style="font-size: medium; font-family: georgia,palatino;"> 

И в некоторых местах такие вещи:

 <p style="text-align: justify;"> <p style="text-align: justify;"><span style="font-size: medium; font-family: georgia,palatino;"><strong><span style="color: #000000;"> 

Так что, поскольку у меня нет 40 часов (даже меньше терпения), чтобы просто войти в каждый пост (их около 100) и удалить эти нежелательные теги, я ищу фильтр, который просто удалит весь стиль (за исключением, может быть, если он содержит элементы text-decoration: underline) перед выдачей the_content ()

Что-то подобное существует?

Solutions Collecting From Web of "Удаление любых и всех встроенных стилей из поля the_content ()"

Просто добавьте это в свои функции.

  Примечание. Этот фильтр работает во время сохранения / обновления сообщения. 

 add_filter ('wp_insert_post_data', 'filter_post_data', '99', 2);

 function filter_post_data ($ data, $ postarr) {

     $ content = $ data ['post_content'];

     $ content = preg_replace ('# <p. *?> (. *?) </ p> #i', '<p> \ 1 </ p>', $ content);
     $ content = preg_replace ('# <span. *?> (. *?) </ span> #i', '<span> \ 1 </ span>', $ content);
     $ content = preg_replace ('# <ol. *?> (. *?) </ ol> #i', '<ol> \ 1 </ ol>', $ content);
     $ content = preg_replace ('# <ul. *?> (. *?) </ ul> #i', '<ul> \ 1 </ ul>', $ content);
     $ content = preg_replace ('# <li. *?> (. *?) </ li> #i', '<li> \ 1 </ li>', $ content);

     $ data ['post_content'] = $ content;

     return $ data;
 }

  Примечание. Этот фильтр работает в то время, когда выполняется функция the_content (). 

 add_filter ('the_content', 'the_content_filter', 20);

 функция the_content_filter ($ content) {
     $ content = preg_replace ('# <p. *?> (. *?) </ p> #i', '<p> \ 1 </ p>', $ content);
     $ content = preg_replace ('# <span. *?> (. *?) </ span> #i', '<span> \ 1 </ span>', $ content);
     $ content = preg_replace ('# <ol. *?> (. *?) </ ol> #i', '<ol> \ 1 </ ol>', $ content);
     $ content = preg_replace ('# <ul. *?> (. *?) </ ul> #i', '<ul> \ 1 </ ul>', $ content);
     $ content = preg_replace ('# <li. *?> (. *?) </ li> #i', '<li> \ 1 </ li>', $ content);
     return $ content;
 }

Я попробовал метод выше с сохранением / обновлением, но не работал для меня, поэтому я пошел с другого подхода. Я экспортировал всю таблицу wp_posts, открыл ее в Sublime и заменил регулярное выражение. Я использовал style="*.*?" найти все случаи и заменить их пустым. Затем вытащили содержимое старой таблицы и импортировали новую.

Если кто-нибудь попробует этот метод – убедитесь, что у вас есть четкое резервное копирование в случае, если в таблице wp_post есть другие типы сообщений, и все получилось немного грязным.

Я бы посмотрел фильтр content_save_pre и, вероятно, применил некоторое причудливое регулярное выражение в этой точке.

Если мы хотим удалить все встроенные стили, просто просто добавьте следующий код в functions.php.

 add_filter('the_content', function( $content ){ //--Remove all inline styles-- $content = preg_replace('/ style=("|\')(.*?)("|\')/','',$content); return $content; }, 20);