Tout savoir sur WordPress

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;
}
Cet article a été publié il y a 4237 jours - Il n'est peut être plus à jour !

Article écrit par jmlapam

29 Commentaires

  1. 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 !

  2. 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);

  3. 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).

  4. 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

  5. Merci Julio, c’est exactement ce type de problème que je voulais pointer, j’ai dû mal m’exprimer. Une solution? Merci

  6. 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 ;)

  7. @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 :

    ' wordpress ' => ' <a href="http://wordpress.org" rel="nofollow">wordpress</a> ', 
  8. 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 :|

  9. @Julio : Tu penses vraiment à tout =D

    Dans ce cas, la meilleure solution reste toujours l’utilisation de preg_replace.

  10. 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.

  11. @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.

  12. 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!

  13. 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 ?

  14. @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 ;)

  15. Bonjour,
    J’ai du mal à comprendre comment utiliser le code. On le copie-colle simplement dans functions.php ?

  16. @Doezer: Oui, comme il est indiqué dans l’article, vous devez insérer le code dans le fichier functions.php de votre thème.

  17. On doit aussi ajouter ce code au début add_filter(‘the_excerpt’, ‘modif_text_wps’); ? Je ne connais pas encore le php

  18. 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.