Il y a quelques semaines, j’ai totalement refait mon site Web (celui sur lequel vous êtes). L’ancien avait 6 ans et, pour des raisons obscures, j’avais utilisé des shortcodes pour ajouter des colonnes ou des séparateurs dans mes contenus. Au cours de la refonte, j’ai dû supprimer tous ces shortcodes, mais je ne voulais pas rechercher et éditer tous les articles manuellement (j’en ai plus d’une centaine sur le blog), j’ai donc écrit une petite fonction pour m’aider dans cette tâche.

J’ai d’abord essayé d’utiliser le filtre strip_shortcodes avec strip_shortcodes_tagnames, mais le problème est que ce hook supprime le shortcode ET son contenu. Donc, dans mon cas, il a supprimé le shortcode qui génère les colonnes, mais aussi le contenu des ces dernières (par exemple : [column] Ce contenu sera supprimé aussi [/column]). Ce n’était donc pas assez précis pour mon besoin.

J’ai finalement décidé d’aller au plus simple et d’utiliser un REGEX avec le hook content_save_pre qui est déclenché juste avant l’enregistrement du contenu dans la base de données. Pour ce faire, je n’ai qu’à mettre à jour en masse mes publications (Bulk edit) pour retirer de mes contenus les shortcodes que je ne veux plus.

Tout ce que vous avez à faire est de fournir la liste des shortcodes dont vous ne voulez plus en remplissant le tableau $tags_to_remove. Vous devez simplement préciser le nom, sans les [].

add_action( 'content_save_pre', 'bweb_remove_shortcodes', 9, 2 );
function bweb_remove_shortcodes( $content  ) {
	
	$tags_to_remove = array(
		'shortcode_to_remove_1',
		'shortcode_to_remove_2',
	);

	foreach( $tags_to_remove as $tag ){
		$content = preg_replace('#\[[^\[]*' . $tag . '[^\]]*\]#', '', $content );
	}

	return $content;

}

J’ai effectué des mises à jour en masse avec 30 publications à chaque fois sans problème, mais cela fonctionne également lors de l’édition d’un post. Je vous suggère d’ailleurs de faire le test en premier en éditant uniquement un post pour vous assurer que la fonction fonctionne correctement pour vous. Lorsque vous aurez terminé, supprimez simplement la fonction 😉

Évitez d’utiliser cette fonction production !

Article rédigé parBrice CAPOBIANCO

Autodidacte passionné par WordPress. J'aime apprendre et créer pour ensuite partager !

Coorganisateur des Meetups WordPress Rennes et fondateur de bweb.
Partager cet article

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