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' );

?>

Le résultat est visible sur mon blog photo, sur l’article consacré à mes crapauds photographiés sous l’eau (vous pouvez observer différents excerpt sur les pages de catégories et de tag concernées : photographies, sous l’eau et herpétologie)

55 commentaires sur WordPress : un excerpt spinnable (et unique pour chaque catégorie ou tag !)
  1. Cédric G. Répondre

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

  2. zatmania Répondre

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

  3. guillaume Répondre

    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

  4. David Répondre

    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.

  5. Le Juge Répondre

    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

  6. Benoit Répondre

    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 🙂

  7. Christian Répondre

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

  8. Chloe Répondre

    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,

  9. thierrypigot Répondre

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

    Thierry

    • Cédric GIRARD Répondre

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

      Bonne remarque !

  10. Valentin Répondre

    Possible avec Prestashop ? 🙂

    • Cédric GIRARD Répondre

      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 !

  11. Clément Répondre

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

  12. Gerard Répondre

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

    • Cédric GIRARD Répondre

      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 !

  13. Joris Répondre

    Bonjour,

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

  14. Zoé Répondre

    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.

  15. Zoé Répondre

    Oui cédric il me semble avoir bien tout suivi… :S

    • auto-pedia.fr Répondre

      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}

  16. Marc Répondre

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

  17. Kiwiz Répondre

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

  18. julien Répondre

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

  19. Jean-Edouard Répondre

    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?

    • Cédric GIRARD Répondre

      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…

  20. Aloisio Répondre

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

  21. romain Répondre

    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 ?

  22. romain Répondre

    personne pour un petit coup de main …Cédric ?

    • Cédric GIRARD Répondre

      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 !

  23. romain Répondre

    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 ?

  24. romain Répondre

    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.

  25. romain Répondre

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

    • Cédric G. Répondre

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

  26. David Répondre

    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.

  27. Aloisio Répondre

    Merci beaucoup pour cette astuces. Je vais l’intégrer tous de suite.

  28. gwen Répondre

    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.

  29. romain Répondre

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

  30. gwen Répondre

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

  31. Evenstood Répondre

    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 ?

    • Cédric GIRARD Répondre

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

      • Cédric GIRARD Répondre

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

  32. romain Répondre

    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.

  33. mike Répondre

    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.

  34. mike Répondre

    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 ?

    • romain Répondre

      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.

  35. sandrine Répondre

    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 .

  36. Fred Répondre

    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 !

  37. Olivier Répondre

    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

  38. Tohom Répondre

    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 🙁

  39. Charles Savares Répondre

    Excellent, je ne savais pas du tout comment faire!

  40. websilon Répondre

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

  41. oliiver Répondre

    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/

    • Cédric GIRARD Répondre

      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' );

Laisser un commentaire

Votre adresse email ne sera pas publiée. Merci de saisir votre nom ou pseudo (pas de pseudo SEO merci !), votre email et votre commentaire.