WordPress : un excerpt spinnable (et unique pour chaque catégorie ou tag !)

L’un des (petits) défauts de WordPress est, dans les thèmes courants que l’on peut trouver sur le marché, de servir un excerpt unique, quel que soit la page où il va s’afficher.

Si par malheur vous avez à un moment donné une catégorie qui affiche scrupuleusement les mêmes articles qu’une page de tags, ou bien deux pages de tags avec les mêmes articles, alors ces pages entreront systématiquement en duplicate content (contenu dupliqué).

Voici un petit hack pour remédier à ce problème, en rendant spinnables les excerpt, et en s’assurant que chaque spin généré soit (quasi) unique pour chaque page de taxonomie 🙂

L’astuce consiste à ajouter un filtre sur l’appel à the_excerpt(), via notre bon vieux fichier functions.php ; en ajoutant une clause srand liée à l’ID de la taxonomie en cours d’affichage, nous rendrons uniques (ou presque) chaque spin pour chaque page de taxonomie (astuce donnée par @512banque, et dont j’ai pris connaissance par Jérémy Allard)

<?php 	/* 	* Fonction de spinning de texte (syntaxe : {test|essai}) 	* avec hack pour spin unique/catégorie ou tag (par @512banque) 	*/ 	function spin($txt){ 		$pattern = '#\{([^{}]*)\}#msi'; 		$test = preg_match_all($pattern, $txt, $out); 		if (!$test) return $txt; 		// On rend le shuffle unique 		if(is_category()) { 			// On est sur une page catégorie 			$category = get_the_category(); 			$mycat = $category[0]->cat_name; 			$id = get_cat_id($mycat); 		} 		elseif(is_tag()) { 			// On est sur une page de tag 			$id=get_query_var('tag_id'); 		} 		else 		{ 			// Autres pages => on génère un ID unique depuis l'URL 			$id= preg_replace("/[^0-9]/", "", md5($_SERVER['REQUEST_URI'])); 		}; 		srand($id); 		$atrouver = array(); 		$aremplacer = array(); 			foreach($out[0] as $id => $match) 			{ 				$choisir = explode("|", $out[1][$id]); 				$atrouver[] = trim($match); 				shuffle($choisir); 				$aremplacer[] = ($choisir[0]); 			} 			$reponse = str_replace($atrouver, $aremplacer, $txt); 		return spin($reponse); 	} 	// Ajout du filtre sur appel de "the_excerpt" 	function spinnable_excerpt_content( $content ) {         return spin($content); 	} 	add_filter( 'the_excerpt', 'spinnable_excerpt_content' ); ?> Langage du code : PHP (php)

Le résultat était visible sur mon blog photo, mais depuis la refonte je n’utilise plus les taxonomies de type tag. Mais quoi qu’il en soit : ça fonctionne !

Voir tous les articles de la catégorie WordPress

56 réflexions sur “WordPress : un excerpt spinnable (et unique pour chaque catégorie ou tag !)”

  1. Avatar de Cédric G.

    À noter que l’on peut également utiliser la même fonction carrément sur the_content au niveau du filtre 😉

    Ainsi il est possible, pour les thèmes qui n’utilisent pas the_excerpt, de spinner également tout ce qui est au-dessus de la balise more.

    Répondre
  2. Avatar de zatmania

    Simple et efficace, merci pour le tip qu’il faudrait que j’adapte à mon propre wp.

    Répondre
  3. Avatar de guillaume

    Merci pour l’astuce, je vais tester ! Ca peut être l’occasion de réactiver certainnes pages.
    une petite coquille :
    et donc j’ai pris connaissance par Jérémy Allard

    Répondre
  4. Avatar de David

    L’un des gros avantages de WordPress c’est justement qu’on peut y ajouter nos propres « plugins » pour peu qu’on sache un peu développer, la preuve en images, ou plutôt en lignes, avec ce petit script, à garder en favori, merci bien.

    Répondre
  5. Avatar de Le Juge

    Elle est pas mal cette petite astuce de Kévin. Elle a le mérite de réveiller les pages categories et Tag – pour peu qu’il y ait quelques articles dedans et elles deviennent potentiellement de bonnes portes d’entrées

    Répondre
  6. Avatar de Benoit

    Excellente idée les amis, c’est clair que c’est un vrai plus d’avoir des excerpt différents du contenu des articles, surtout lorsque ces excerpt sont particulièrement longs.

    Merci beaucoup pour ce code, je vais tester ça ce week end 🙂

    Répondre
  7. Avatar de Christian

    cela me fait drôle de revoir cette syntaxe, bien pratique dans ce cas précis 😉

    Répondre
  8. Avatar de Chloe

    Bonjour,

    C’est en effet un problème récurrent pour les blogs WordPress qui publient souvent dans la même catégorie.
    Vous venez de donner la solution. Merci beaucoup pour le script !

    Bon week-end,

    Répondre
  9. Avatar de thierrypigot

    Bonne idée, faut juste penser à également mettre la fonction dans le functions.php de wpTouch 😉

    Thierry

    Répondre
    1. Avatar de Cédric GIRARD
      Cédric GIRARD

      Effectivement, je n’y avais pas pensé (en fait je ne savais pas)

      Bonne remarque !

      Répondre
    1. Avatar de Cédric GIRARD
      Cédric GIRARD

      Ahhhh en voilà une bonne idée 🙂

      Bon ceci dit, faudrait déjà que mes clients saisissent des descriptions uniques avant de penser à faire du spinning… Mais effectivement ça peut être intéressant !

      Répondre
  10. Avatar de Clément

    Bonjour,

    Une très bonne astuce ! Je vais testé ça rapidement. Comme le dit Valentin la même chose sous PrestaShop sera vraiment bien, c’est à étudié.

    Répondre
  11. Avatar de Gerard

    Bonjour Merci pour votre spiner. Avez vous prévu une mise a jour prochainement ??? pour juillet ou Aout ? Merci et bon courage. Vive effispin 🙂

    Répondre
    1. Avatar de Cédric GIRARD
      Cédric GIRARD

      Bonjour Gérard

      Oui, une mise à jour (colossale !) est en cours de finition… J’ai d’ailleurs peut-être eu les yeux plus gros que le ventre 🙂 mais le résultat devrait plaire !

      Répondre
  12. Avatar de Joris

    Bonjour,

    Très pratique ! Merci bien pour ce script qui peu-être très utile.

    Répondre
  13. Avatar de Zoé

    Bonsoir,

    Je l’ai mis dans function.php mais j’ai toujours les mm extrait pour les tag et les catégories.

    Faut il faire autre chose? merci de m’aider.

    Répondre
    1. Avatar de Cédric GIRARD
      Cédric GIRARD

      Bonjour

      Vous avez bien utilisé la syntaxe appropriée au niveau de l’excerpt ?…

      (voir ici : https://www.effi10.com/tutoriel-redaction-content-spinning-masterspin/ )

      Répondre
    1. Avatar de auto-pedia.fr
      auto-pedia.fr

      Bonjour Zoé,
      Avez-vous bien rédigé le début de votre article de manière à ce qu’il soit spinnable comme indiqué en commentaire du code ? {texte base| texte a remplacer}

      Répondre
  14. Avatar de Marc

    Bonjour, merci bien pour ce script très pratique, il va très certainement me servir 🙂

    Répondre
  15. Avatar de Kiwiz

    Je dois avoir un soucis dans mon code, lorsque je fais cette manip ça me met une erreur php 🙁

    Répondre
  16. Avatar de julien

    Merci du conseil, je vais le tester. c’est effectivement un truc qui me bloquait depuis quelques mois!

    Répondre
  17. Avatar de Jean-Edouard

    Je me pose une question, doit on effectuer un changement important lorsqu’on veut faire du multi spin?

    Tu devais faire une mise à jour? si oui il y aura quoi de nouveau?

    Répondre
    1. Avatar de Cédric GIRARD

      Bonsoir

      La v2.0 est toujours sur le feu, on va dire « en pause hivernale » (hum…) mais je terminerai. Ces temps ci j’ai peu de temps à y consacrer malheureusement !

      Le multispin fonctionne très bien, je n’ai pas encore encodé la sauvegarde/restauration de projets (totalement différente de la v1.x d’effiSpin au passage…)

      Y’aura donc au programme le multispin (avec fonctionnalités matricielles), l’intégration plus fine de base de données, l’alimentation de blogs WordPress via XML RPC, etc.

      Beaucoup de choses fonctionnent mais ne sont pas encore débuguées…

      Répondre
  18. Avatar de Aloisio

    Merci pour se hack je vais essayé tous de suite.
    Cela marche aussi pour un multisite?

    Répondre
  19. Avatar de romain

    bonjour,
    j’ai mis le code dans le fichier function, il mélange bien les contenus ce qui me donne des textes différents sur les tags et les catégories mais sur l’article complet, il me donnes les deux textes en même temps…quelqu’un a une idée d’où ça peut venir ?

    Répondre
    1. Avatar de Cédric GIRARD

      Bonjour

      Ahhh c’est étrange !!! Tu n’aurais pas deux fois la fonction pour afficher l’excerpt dans ton code ?…

      Parce que techniquement je vois pas comment ça peut être possible autrement 🙂

      Tu peux coller ton code dans une balise < code > ici même !

  20. Avatar de romain

    Salut Cédric,
    j’ai essayé de te poster le code du fichier function mais ça passe pas ou alors ça part direct en spam peut être.
    est ce que tu veux que je te l’envoie sur ton formulaire de contact ?

  21. Avatar de romain

    hello,
    Ta réponse ma mis sur la voie et j’ai trouvé la solution,
    j’ai rajouté un filtre sur the_content également.
    Je pense que ça doit être propre à certain thème.
    en tous cas merci.

  22. Avatar de romain

    ah oui je rajoute le code ça peut servir pour quelqu’un d’autre
    add_filter( 'the_content', 'spinnable_excerpt_content' );

    Répondre
    1. Avatar de Cédric G.

      Oui effectivement, on peut appliquer le filtre à tout ce que l’on veut de filtrable 😉

      Répondre
  23. Avatar de David

    Cette astuce demande finalement beaucoup de travail, (spinner chaque excerpt) pour un risque finalement relativement minime non ?

    Je ne suis pas spécialiste wordpress donc j’imagine sans doute pas l’utilité du script mais j’admire l’optimisation et la recherche du détails.

    Répondre
  24. Avatar de gwen

    Bonjour, j’ ai le même soucie que Zoé. J’ai intégré le script dans mon fichier functions.php. Puis j’ai copier coller pour voir dans un aticle »{texte base| texte a remplacer}  » puis enregistré et c’est écrit « {texte base| texte a remplacer} « ..j’ ai du oublier quelque chose… une troisième video ou capture d’écran d’intégration et d’utilisation serait bienvenue pour la touriste que je suis^^. Ha, j’oubliai, merci beaucoup pour ce script et le logiciel…enfin quelque chose de nouveau (pour moi) dans le monde seo.

    Répondre
  25. Avatar de romain

    avec certain theme,il faut filtrer le contenu également et pas seulement l’extrait, voir mon post plus haut.

    Répondre
  26. Avatar de gwen

    Oui, je l’est bien vue (si tu parle de add_filter( ‘the_content’, ‘spinnable_excerpt_content’ ); )mais je ne sais pas où l’ajouter ..

    Répondre
  27. Avatar de Evenstood

    Salut salut,

    Je viens de voir cette possibilité et j’ai direct inclus ça sur notre site (voir url pseudo) mais j’ai un soucis, quand je recharge je n’est pas de changement de texte et celui-ci n’a été effectif que pour la home.

    Du coup je me retrouve bien avec la home + une catégorie spinné mais la sous cat reste toujours comme la cat, normal docteur ?

    Répondre
    1. Avatar de Cédric GIRARD

      Ben c’est le but du plugin : « figer » chaque spun selon l’URL 😉

      Répondre
      1. Avatar de Cédric GIRARD

        Ah par contre la sous-catégorie, c’est effectivement pas normal… Lié peut-être à l’URL ? Je ne sais pas 🙁

        Répondre
  28. Avatar de romain

    désolé je te réponds un peu tardivement, en fait il faut l’ajouter dans tous les fichiers de ton thème où il y a the_content. (par exemple loop.php, function.php) après faut tester parce que ça dépend du thème que tu utilises.

    Répondre
  29. Avatar de mike

    un double classement quotidien des sites francophones basé sur les visites et les votes reçus par les sites.
    Weborama.fr permet ainsi aux internautes de découvrir les meilleurs sites du moment.

    Répondre
  30. Avatar de mike

    bonjour,
    j’ai mis le code dans le fichier function, il mélange bien les contenus ce qui me donne des textes différents sur les tags et les catégories mais sur l’article complet, il me donnes les deux textes en même temps…quelqu’un a une idée d’où ça peut venir ?

    Répondre
    1. Avatar de romain

      comme indiqué plus haut dans mon post précédent, il faut bien filtrer TOUS les contenus.
      Ce que tu indiques, montre qu’il y a un filtre qui n’a pas été appliqué correctement.

      Répondre
  31. Avatar de sandrine

    Perso j’ai toujours pas confiance au Spinning d’ailleurs les gens ont déjà du mal à mettre des textes uniques alors lol le spinning mais merci je vais quand même tester pour voir .

    Répondre
  32. Avatar de Fred

    C’est un réel défaut de WordPress. J’espère que dans les prochaines version, cette optimisation des extraits sera rajoutée nativement. Tant dans un objectif d’ergonomie utilisateur que de référencement d’ailleurs !

    Répondre
  33. Avatar de Olivier

    Bonjour et merci Cédric
    Justement les tags devenaient un sujet épineux pour quelques un de mes sites …
    Je rajoute ce blog dans mes bookmarks 😉
    Olivier

    Répondre
  34. Avatar de Tohom

    Merci pour ce script, je vais bidouiller mon function.php et je voir ce que ça donne.
    Encore un article stp, ça fait 5 mois 🙁

    Répondre
  35. Avatar de websilon

    Superbe, merci pour le partage, il est vraiment trop fort ce @515banque !! mais comment fait-il pour penser à ça ?? Comme beaucoup de tools, une fois que tu l’as ça te parait évident mais franchement j’y aurait pas pensé tout seul.

    Ca règle un des principaux problèmes de wordpress concernant le DC et ça permet beaucoup plus de liberté pour utiliser les pages tag et catégorie qui peuvent potentiellement être « bankable » (et ainsi transformer une lacune en véritable potentiel).

    Répondre
  36. Avatar de oliiver

    Cédric, il faut suivre le fil des comment et les diverses interventions de chacun pour arriver à un résultat qui fonctionne. Ce sujet est super intéressant, mais as tu utilisé déjà ce plugin, qui pourrait permettre de faciliter la tache de tout le monde ? Je ne l’ai pas encore testé mais en faisant quelques recherches, ce lien m’est apparu : https://wordpress.org/plugins/advanced-excerpt/

    Répondre
    1. Avatar de Cédric GIRARD
      Cédric GIRARD

      Bonjour Olivier

      En principe le seul fait de copier/coller le code dans le functions.php doit suffire, si le thème est correctement développé (si le filtre sur « the_excerpt » ne fonctionne pas c’est que le thème utilise « the_content » partout, par exemple)

      On peut étendre cette fonction à « the_content » en ajoutant un filtre comme suit :

      add_filter( 'the_content', 'spinnable_excerpt_content' );

      Répondre
  37. Avatar de Fabien

    Sympa comme technique
    Je viens de tomber la dessus alors que je cherchais totalement autre chose et ça va envoyer du bois mixé à une API sémantique que j’utilise déjà

    Merci bcp vraiment !!!

    Répondre

Laisser un commentaire

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

Retour en haut