it-swarm.com.de

Alle Inline-Stile aus the_content () entfernen

Für eines meiner aktuellen Projekte musste ich Blogposts von einer alten Wordpress-Site in mein Projekt übertragen.

Die Dinge liefen reibungslos, bis ich gesehen habe, dass alle Posts aus Word kopiert und eingefügt wurden.

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

Und an einigen Orten Dinge wie diese:

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

Also, weil ich nicht die 40 Stunden (noch weniger die Geduld) habe, um einfach in jeden Post zu gehen (es gibt ungefähr 100) und diese unerwünschten Tags zu entfernen, suche ich nach einem Filter, der einfach alle Stile entfernt (außer vielleicht wenn es enthält text-decoration: unterstreiche) elemente vor der ausgabe von the_content ()

Gibt es so etwas?

5
Fredy31

Wenn wir alle Inline-Stile entfernen wollen, müssen wir einfach den folgenden Code in functions.php einfügen.

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

Fügen Sie dies einfach zu Ihrer functions.php hinzu.

 Hinweis: Dieser Filter funktioniert zum Zeitpunkt des Speicherns/Aktualisierens des Beitrags. 
 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; 
 
 $ data zurückgeben; 
} 

 Hinweis: Dieser Filter funktioniert zu dem Zeitpunkt, an dem die Funktion the_content () ausgeführt wird. 
 add_filter ('the_content', 'the_content_filter', 20); 
 
 function 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); 
 $ content zurückgeben; 
} 
5
golchha21

Ich habe die oben beschriebene Methode mit dem Speichern/Aktualisieren ausprobiert, aber sie hat bei mir nicht funktioniert, und bin von einem anderen Ansatz ausgegangen. Ich habe die gesamte wp_posts-Tabelle exportiert, sie in Sublime geöffnet und einen regulären Ausdruck ersetzt. Ich habe style="*.*?" verwendet, um alle Fälle zu finden und durch leere Fälle zu ersetzen. Dann löschte die alte Tabelle den Inhalt und importierte die neue.

Wenn jemand diese Methode ausprobiert - bitte stellen Sie sicher, dass Sie ein klares Backup haben, falls es einige andere Post-Typen in der wp_post-Tabelle gibt und die Dinge etwas chaotisch werden.

3
alordiel

Ich würde den content_save_pre-Filter auschecken und an diesem Punkt wahrscheinlich einen ausgefallenen regulären Ausdruck anwenden.

0
vancoder