WordPress : nettoyer vos posts avec des triggers

WordPress : nettoyer vos posts avec des triggersJe 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 », 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>&nbsp;</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>&nbsp;</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>&nbsp;</p>','');
    set NEW.post_content=REGEXP_REPLACE(NEW.post_content,'<img class="[^"]+"','<img ');    
  END
$$
DELIMITER ;

WordPress  / Formateur WordPress 

Commentaires

Hello,

Je ne pense pas que tu l’aies mentionné, mais pour ceux qui veulent sauvegarder ces triggers, ils sont stockés dans la table information_schema.triggers (cf doc de mysql : https://dev.mysql.com/doc/refman/5.7/en/faqs-triggers.html)

A rajouter aux scripts de backup si on ne sauvegarde pas l’intégralité de la base de données (cas d’une sauvegarde complète de VM via proxmox, veeam pour vmware, snapshot cloud, etc) ;)

Je connaissais pas cette fonctionnalité, merci pour cette découverte !

Laisser un commentaire

(requis)

(requis)