Modifier automatiquement un mot ou une phrase d’un article
Grâce à cette astuce, vous allez pouvoir modifier automatiquement un mot ou même une phrase entière d’un ou plusieurs articles.
Parfois, on peut vouloir modifier un mot ou même une phrase entière d’un article. Soudain, on se rend compte que cette phrase ou ce mot est utilisé dans plusieurs articles et l’on souhaiterait appliquer automatiquement la modification sur tous les articles.
Dans l’exemple suivant, on décide de modifier les mots “wordpress” et “contact” par des liens hypertexte (code insérer dans le fichier functions.php) :
add_filter('the_content', 'modif_text_wps'); // Si on veut aussi appliquer la modification dans les extraits des articles add_filter('the_excerpt', 'modif_text_wps'); function modif_text_wps($texte){ $modif = array( // 'texte à changer' => 'nouveau texte' 'wordpress' => '<a href="http://wordpress.org">wordpress</a>', 'contact' => '<a href="#">contact</a>' ); $texte = str_replace(array_keys($modif), $modif, $texte); return $texte; }
29 Commentaires
Hello
Ajoutons aussi pourquoi pas ce filtre afin que les commentaires en bénéficient aussi :
add_filter(‘comment_text’, ‘modif_text_wps’);
Cette astuce va servir à beaucoup de monde je pense, simple, facile, pas lourde.
Merci !
C’est SEO smart links non ?
Tres pratique si on migre de site ou bien si on passe en local par exemple
Effectivement, pas mal du tout ce petit bout de code. On peut même rajouter une condition pour qu’il ne fasse la modification qu’avec une seule occurrence si besoin est :
$texte = str_replace(array_keys($modif), $modif, $texte, 1);
@Julio : exact, erreur de ma part. ;)
En effet, c’est une astuce vraiment sympa.
Ça me fait penser au plugin qui permet de modifier automatiquement les mots par des liens (désolé, je n’ai plus le nom =D).
Si je veux remplacer une chaîne de caractère par un lien, comment vérifier que cette chaîne n’est pas déjà incluse dans le texte d’un lien existant? Merci
Merci Julio, c’est exactement ce type de problème que je voulais pointer, j’ai dû mal m’exprimer. Une solution? Merci
Le 4è paramètre ne permets pas de limiter le nombre de remplacement mais doit être une variable et le nombre de remplacements effectués sera set dans cette variable. C’est preg_replace() qui le fait ;)
@Rémy : C’est ça :) le plugin auquel je pensais est SEO Smart Links .
@DMSR : Le mieux serait de remplacer le str_replace par un preg_replace. Mais son veut faire simple, il y a une petite feinte : c’est de mettre un espace avant et après le mot que l’on recherche.
Exemple :
Attention Jo, car dans le cas du remplacement de ” wordpress “, si j’ai un lien dont le texte est “Sécurité wordpress plugin”, je vais avoir un lien dans le lien :|
@Julio : Tu penses vraiment à tout =D
Dans ce cas, la meilleure solution reste toujours l’utilisation de preg_replace.
Merci pour vos retours. Merci julio, c’est vrai que tant qu’à faire autant l’appliquer aux commentaires.
La limite c’est de bien faire attention aux modifications de masse en effet. Mais l’avantage est que c’est réversible rapidement.
Il faut faire attention. Si le texte à remplacer se trouve dans le url(href) d’un lien, on peut briser le lien!
On peut s’inspirer de la fonction capital_P_dangit() http://core.trac.wordpress.org/browser/tags/3.4.2/wp-includes/formatting.php#L3202
@nicolas : comme je le disais juste avant :”La limite c’est de bien faire attention aux modifications de masse en effet”.
Maintenant rien en vous empêche de transformer tous les wordpress en WordPress, pour la beauté du geste… et en dehors de vos modifs utiles.
Génial ce bout de code, c’est moins lourd qu’un plugin et ça dépanne bien pour un flashback si on a oublié de lier des mots-clés!
Hello,
La question concernant le non remplacement du mot déjà présent dans une url m’intéresse.
Malheureusement, en remplaçant str_replace par preg_replace j’obtient une erreur php…
Quelqu’un aurait une idée ?
@fmandroid : cf le commentaire de Jonathan : “c’est de mettre un espace avant et après le mot que l’on recherche”.
Je viens d’essayer mais cela ne fonctionne pas…
@FMANDROID : C’est normal, les fonctions str_replace et preg_replace ne s’utilise pas de la même façon. On doit obligatoirement indiquer un regex lorsqu’on se sert de preg_replace.
Je vous laisse voir la documentation PHP pour plus d’informations ;)
Ne fonctionne pas chez moi…
Bonjour,
J’ai du mal à comprendre comment utiliser le code. On le copie-colle simplement dans functions.php ?
@Doezer: Oui, comme il est indiqué dans l’article, vous devez insérer le code dans le fichier functions.php de votre thème.
et pour les pages?
@nergal : Ce code fonctionne aussi pour les pages.
On doit aussi ajouter ce code au début add_filter(‘the_excerpt’, ‘modif_text_wps’); ? Je ne connais pas encore le php
Plus exactement, si je veux juste changer du texte sans ajouter d’URL, je dois écrire:
add_filter(‘the_excerpt’, ‘modif_text_wps’);
function modif_text_wps($texte){
$modif = array(
// ‘texte à changer’ => ‘nouveau texte’
);
$texte = str_replace(array_keys($modif), $modif, $texte);
return $texte;
}
C’est à dire le même code mais sans les Url ? Désolé si ma question semble idiote mais je préfere être sûr
Tu peux mettre ce que tu veux dans l’ancienne chaine et dans la nouvelle.
Je te conseille de faire un peu de PHP avant d’utiliser ce genre de fonctions, cela te permettra d’être plus à l’aise.