web-dev-qa-db-fra.com

Existe-t-il un moyen rapide de supprimer les fichiers css en ligne de tous les articles?

J'ai 40 sites WordPress avec 20-30 pages sur chacun. La plupart d'entre eux ont des css en ligne, comme <p style="text-align: justify;"> dans chaque paragraphe.

Existe-t-il un moyen rapide, principalement automatisé, de supprimer tous ces CSS en ligne en même temps? Même en cliquant sur toutes ces pages et tous ces messages, ce sera pénible; Je ne veux pas dépenser plus de 3-4 clics par page pour supprimer ces lignes.

Je sais que je peux donner la feuille de style !important, mais cela ne suffit pas - je dois supprimer totalement ces lignes CSS.

6
Gergő Garai

Je peux penser à cela de différentes manières:

  1. Faites-le une fois pour tous les messages en cours
  2. Faites-le au moment de l'exécution avant d'afficher les articles (soit en filtrant the_content, soit avec jQuery)
  3. Faites-le avec important! dans votre CSS - comme vous l'avez mentionné

Chaque méthode est un moyen légitime de s’y attaquer et chacune comporte des avantages et des inconvénients.

Je prends généralement l’option 3, car c’est le moyen le plus simple de faire en sorte que le contenu de publication copié d’ailleurs soit toujours conforme au thème recherché. J'étend le CSS uniquement au conteneur dans lequel le contenu sera publié, et je remplace simplement les propriétés qui causent les plus gros problèmes - généralement font-size, text-align, font-family et autres - avec une valeur de inherit !important, de sorte qu'il fonctionne comme le thème prévu.

Dans votre cas, vous avez déjà déclaré que cela ne va pas la réduire. Je suppose que c'est parce que vous traitez un large éventail de règles CSS, et énumérer toutes les propriétés CSS connues de l'homme est bien trop fastidieux.

Dans ce cas, les deux autres options ci-dessus vont dépendre de votre objectif: voulez-vous simplement ajuster les posts actuels et ne pas affecter les futurs posts pouvant être insérés sur le site, ou voulez-vous ne pas toucher réellement les messages en tant que tels, mais simplement changer la façon dont ils sont affichés - ce qui signifie que les futurs messages seront également "corrigés"?

Une fois pour toutes les publications actuelles peut être effectué avec une requête SQL directe dans votre base de données. Analyser le code HTML et prendre des décisions automatisées peut être dangereux. Je pense donc que le moyen le plus sûr de le faire serait de rechercher/remplacer dans votre table wp_posts où vous ne remplacez que style=" par data-style=". C'est encore valide HTML5; il ne sera pas lu comme un attribut de style; et il y a très peu de chance que vous ratiez quelque chose que vous ne vouliez pas (à moins bien sûr que vous ayez des posts contenant des exemples de code?).

Il existe de nombreuses façons d'effectuer une recherche-remplacement sur votre base de données. Je suggère d'utiliser wp-cli 's search-replace command:

wp search-replace ' style="' ' data-style="' wp_posts --include-columns=post_content

Wp-cli doit être installé pour pouvoir le faire. Les instructions d’installation sont ici (en passant, si vous êtes sous Windows et que vous ne parvenez pas à suivre les instructions, laissez-moi savoir dans les commentaires et peut-être que je pourrait faire un Q & A sur cela).

Le faire au moment de l'exécution avant d'afficher les articles peut être fait avec le filtre the_content , et je ferais probablement la même chose à ce qui précède pour les mêmes raisons que vous ne voulez pas accidentellement remplacez quelque chose dont vous avez besoin. Quelque chose comme ça:

add_filter( 'the_content', function( $content ){
  return str_replace( ' style="', ' data-style="', $content);
});

Enfin, si vous faites avez des publications contenant des exemples de code - ou si vous voulez simplement être absolument sûr vous ne remplacez que ce que vous voulez réellement, je recourrais probablement à en utilisant jQuery sur la page. Jamais le meilleur moyen de gérer du contenu lorsque vous pouvez le faire côté serveur, mais je le mentionne pour être complet:

jQuery( '.your_post_content_wrapper *' ).attr( 'style', '');
7
Tim Malone