WordPress : nettoyer vos posts avec des triggers
Je continue d’explorer l’emploi de triggers dans WordPress, notamment pour me débarrasser de bouts de code HTML ajoutés automatiquement ou bien du fait de ma négligence toute relative.
Images et paragraphes vides
A chaque fois que j’insère une image dans une de mes publications, WordPress ajoute à la balise img une classe du type class= »alignnone wp-image-XXXXX size-full », où XXXXX correspond au numéro du post. Le souci est que l’ajout de cet attribut à la balise class empêche l’affichage de l’image, faisant croire au lecteur que le lien est cassé !
Et puis, j’ai un 2e souci, bien moins important que le précédent. Je laisse très souvent à la fin d’un article des paragraphes vides transcrits en HTML par le code <p> </p>.
Un trigger BEFORE INSERT
Attention, la mise en œuvre de ce déclencheur n’est possible que sur MariaDB, dans la mesure où MySQL ne dispose pas de la fonction REGEXP_REPLACE. C’est d’ailleurs une sacrée limitation fonctionnelle !
DELIMITER $$ DROP TRIGGER IF EXISTS before_insert_post$$ CREATE TRIGGER before_insert_post BEFORE INSERT ON wp_posts FOR EACH ROW BEGIN set NEW.post_content=REPLACE(NEW.post_content,'<p> </p>',''); set NEW.post_content=REGEXP_REPLACE(NEW.post_content,'<img class="[^"]+"','<img '); END $$ DELIMITER ;
Un trigger BEFORE UPDATE
Ce code ne peut s’exécuter que dans les conditions indiquées ci-dessus.
DELIMITER $$ DROP TRIGGER IF EXISTS before_update_post$$ CREATE TRIGGER before_update_post BEFORE UPDATE ON wp_posts FOR EACH ROW BEGIN set NEW.post_content=REPLACE(NEW.post_content,'<p> </p>',''); set NEW.post_content=REGEXP_REPLACE(NEW.post_content,'<img class="[^"]+"','<img '); END $$ DELIMITER ;