(modifié le 21 mars 2021 à 16:46)

Il y a quelques années j'installais l'extension WordPress Embedded Video With Link pour intégrer des vidéos dans mes billets, avec un tag spécifique.

search-regex-wordpress

Depuis la version 2.9 de WordPress l'intégration de vidéos est native, il suffit de préciser l'URL d'une vidéo sur une ligne vierge. J'ai cherché à supprimer tous les tags inutiles afin de supprimer le plugin inutile ensuite. Comme j'avais inséré pas mal de vidéos avec ce plugin je me voyais mal éditer mes billets un par un.

Voyons comment automatiser l'édition des billets.

Ce qu'il faut modifier

L'extension insérait une vidéo sous la forme suivante :

[fournisseur id_video option]

Exemple :

[youtube 1ylPyfX3pD0 nolink]

doit devenir :

http://www.youtube.com/watch?v=1ylPyfX3pD0

option étant facultatif, il peut aussi s'agir de direct mais je ne l'ai jamais utilisé.

Attention : l'intégration native de vidéos dans WordPress ne fonctionne que si le lien n'est pas entouré de balise paragraphe "<p>". Hors dans mon cas j'avais parfois centré ces vidéos, ce qui donnait :

<p style="text-align: center;">[youtube 1ylPyfX3pD0]</p>

Bullshit level 2.

Avant tout, sauvegardez !

Avant toute modification, faites une sauvegarde complète de votre blog : contenu et base de données. On n'est jamais trop prudent.

Impossible sans RegeXP

J'ai voulu modifier la base de données, mais impossible de modifier des tuples avec une expression régulière dans MySQL (il ne supporte par la récupération des champs $1,$2, etc). Sauf peut-être avec de sombres extensions.

La solution la plus rapide est de faire un dump mysql afin de traiter le le contenu avec une regexp, avec l'outil sed, notepad++ ou en PHP, et vous étiez nombreux à m'orienter vers cette solution quand je vous posais la question sur twitter. Cette solution a l'inconvénient de devoir passer le site en maintenance avant l'import du nouveau dump pour éviter d'écraser d'éventuels commentaires, sans parler du charset et du poids conséquent du dump.

Et puis j'ai trouvé le plugin WordPress Search Regex, c'est cette solution que j'ai choisie.

Attention : si vous modifiez des données qui sont sérialisées il faudra utiliser un autre moyen

C'est parti

Une fois le plugin installé je vous invite à lire la documentation sur le site de l'auteur. Le plugin n'est pas très récent et n'est pas compatible à 100% mais il fonctionne tout à fait pour faire des remplacements.

L'accès se fait via le menu Outils > Search Regex.

Configurez de la sorte :

  1. Source : post content (cherche dans les billets)
  2. Limit to : No limit
  3. Regex : cocher
  4. Entrer la recherche (search pattern) et la chaîne de remplacement (replace parttern)
  5. Cliquez sur Search
  6. Cocher les deux autres cases qui apparaissent maintenant : case-insensitive et multi-line (permet de remplacer plusieurs fois la chaîne dans un même billet)

search-regex-configuration

Afin de ne pas laisser de balise paragraphe vide j'ai procédé en plusieurs étapes pour le "search pattern" :

|<p style="text-align: center;">\[youtube ([^ ]+) nolink\]</p>|
|<p style="text-align: center;">\[youtube ([^ ]+)\]</p>|
|\[youtube ([^ ]+)( nolink)\]|
|\[youtube ([^ ]+)\]|

J'ai tenté de réduire la chaîne de recherche en une seule mais le plugin ne semble pas le supporter car il n'affichait aucun résultat.

La chaîne de remplacement, elle, ne change pas :

http://www.youtube.com/watch?v=$1

Le bouton "replace" permet de voir ce que le plugin va remplacer, ce bouton ne modifie pas la base de données. Si tout vous semble correct cliquez sur le bouton "replace & save" qui va appliquer les modifications dans la table MySQL.

Quand je disais que le plugin n'était pas totalement compatible c'est parce que l'édition rapide ne fonctionne pas en cliquant sur les champs en rouge/vert, ainsi que le lien "replace" en face de chaque résultat.

Je vous laisse le soin de faire la modification pour dailymotion, vimeo ainsi que tous les autres founisseurs vidéos que vous avez pu utilisé. Je fais attention à ne pas utiliser de plugin qui pourrissent le contenu pour éviter ce genre de manipulations, mais il y 7 ans que j'ai commencé ce blog WordPress n'était pas aussi complet.

N'hésitez pas si vous connaissez d'autres méthodes.

Edit 2021 : il existe aussi Better Search Replace

Auteur : Mr Xhark

Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter