web-dev-qa-db-fra.com

Supprimer tous les styles en ligne de the_content ()

Pour l'un de mes projets en cours, j'ai dû transférer des articles de blog d'un ancien site Wordpress vers mon projet.

Les choses se sont bien passées jusqu'à ce que je voie que tous les articles ont été copiés à partir de Word, ce qui laisse à peu près tous les paragraphes précédents:

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

Et à certains endroits, des choses comme celles-ci:

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

Donc, parce que je n'ai pas les 40 heures (encore moins de patience) pour aller à chaque poste (il y en a environ 100) et supprimer ces tags indésirables, je cherche un filtre qui supprimerait tout le style (sauf peut-être si il contient les éléments text-decoration: underline) avant de sortir the_content ()

Une telle chose existe t elle?

5
Fredy31

Si nous voulons supprimer tous les styles en ligne, il suffit d’ajouter le code suivant dans functions.php.

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

Ajoutez simplement ceci à votre functions.php.

 Remarque: ce filtre fonctionne au moment de la sauvegarde/mise à jour de la publication. 
 add_filter ('wp_insert_post_data', 'filter_post_data', '99', 2); 
 
 fonction 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; 
} 

 Remarque: Ce filtre fonctionne au moment où la fonction the_content () est exécutée. 
 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); 
 renvoie $ content; 
} 
5
golchha21

J'ai essayé la méthode ci-dessus avec la sauvegarde/mise à jour, mais ne fonctionnant pas pour moi, je suis parti d'une autre approche. J'ai exporté la totalité de la table wp_posts, je l'ai ouvert dans Sublime et fait une substitution de regex. J'ai utilisé style="*.*?" pour trouver tous les cas et les ai remplacés par emptyyness. Supprimez ensuite le contenu de l'ancienne table et importez le nouveau.

Si quelqu'un essaye cette méthode, assurez-vous d'avoir une copie de sauvegarde claire au cas où il y aurait d'autres types de publication dans la table wp_post et que tout soit devenu compliqué.

3
alordiel

Je vérifierais le filtre content_save_pre et appliquerais probablement quelques regex fantaisistes à ce stade.

0
vancoder