Remplacer du texte via Regex dans les post de WordPress

Suite à la dernière mise à jour de WordPress, j’ai perdu la structure d’URL que j’avais précédemment. J’utilisais jusque là : %post_id%-%postname%. Donc le post d’id 1234 et ayant pour nom d’URL mon-post-sur-wordpress donnait une URL en mondomaine.fr/1234-mon-post-sur-wordpress. Or il m’a semblé que depuis la dernière version de WordPress, les URLs en %post_id%-%postname% ne fonctionnaient plus (pour régler vos structures d’URLs, allez dans Réglages>Permaliens).

Problème : j’avais plusieurs milliers d’URLs dans mes billets (3181 je crois) pointant vers le blog et ayant l’ancienne structure d’URL. Donc la question qui s’est très vite posée : comment corriger ça sachant que je n’ai ni le temps ni l’envie de faire tout ça à la main ?
La structure d’URL avant :
Structure-URL-avant

La structure d’URL que j’ai adopté après la mise à jour de WordPress (la version 4.9) :

J’ai bien tenté de faire des search/replace dans phpmyadmin sur le site de mon hébergeur, mais apparemment le mysql/phpmyadmin ne semble pas avoir les fonctions de search par regex incluse par défaut. N’ayant pas envie de prendre du temps pour chercher si on pouvait rajouter des fonctions dans le Mysql de mon hébergeur (j’ai de gros doutes là dessus), je suis parti sur l’option que cela devait être faisable depuis un plugin WordPress.

Le premier que j’ai trouvé, à savoir Search Regex, semble faire l’affaire. On peut :

  • exécuter sa recherche en cliquant sur Search
  • voir ce que le replace ferait sans l’appliquer réellement en cliquant sur Replace
  • Appliquer réellement le search&replace en cliquant sur Replace&Save

Après plusieurs tentatives (notamment car la doc n’est pas fameuse pour donner les délimiteurs), voilà ce que j’ai fini par trouver. Pour remplacer une URL et en changer la structure, voilà ce que j’ai mis.
Dans le search (que dit cette ligne ? Que en gros je cherche tous les nombres après le slash de abricocotier.fr/ suivi d’un tiret et suivi de tout ce qui est chiffres et lettres et tiret suivi d’un guillemet) :

@www\.abricocotier\.fr\/(\d+)-([0-9a-z-]+)"@

Dans le replace (je remplace, si vous avez bien suivi, par un slash entre les deux blocs plus haut, au lieu d’un tiret comme c’était le cas avant, puis j’ajoute également un slash à la fin avant le guillemet) :

www.abricocotier.fr/${1}/${2}/"

Voilà ce que ça donne avant que je ne le fasse tourner. J’ai tenté au départ en mettant un chiffre au départ (regardez bien le screenshot ci-dessous, j’ai rajouté un 9 afin de limiter à tous les post_id commençant par un 9, afin, grosso modo, de diviser par 10 le nombre de résultats que ça pourrait me retourner et accélérer la recherche).
search-replace-plugin

2 réflexions sur « Remplacer du texte via Regex dans les post de WordPress »

  1. Bonjour, j’ai actuellement un site édité avec GoLive et je suis tentée de passer à WordPress pour un tas de raisons, mais est il possible de garder la même structure des url ? merci

    RépondreRépondre
  2. Bonjour,

    Ca dépend de la structure d’URL que vous aviez chez GoLive. Mais normalement c’est faisable.

    RépondreRépondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.