vendredi 25 septembre 2026

À propos

Contact

Tips

Longueur et lien « Lire la suite » des extraits : les filtres qui comptent

55 mots par défaut, un « […] » sans lien : l'extrait natif de WordPress déçoit souvent. Trois filtres suffisent à le rendre présentable.

Par Clément Hadrot • 18 mai 2020 • 4 min de lecture • Aucun commentaire
Longueur et lien « Lire la suite » des extraits : les filtres qui comptent

Par défaut, the_excerpt() affiche 55 mots suivis d’un discret « […] » sans le moindre lien cliquable. C’est fonctionnel, mais rarement ce qu’attend un client : la plupart veulent un extrait plus court sur la page d’accueil, et surtout un vrai bouton « Lire la suite » qui pointe vers l’article.

Trois filtres du cœur de WordPress permettent de reprendre la main sans toucher au thème en profondeur : excerpt_length, excerpt_more, et la fonction wp_trim_words() pour les cas où l’on construit son propre extrait à la main. Voici comment les combiner.

Changer le nombre de mots avec excerpt_length

Le filtre excerpt_length reçoit le nombre de mots par défaut (55) et doit retourner le nombre souhaité. Il s’applique uniquement quand l’extrait est généré automatiquement à partir du contenu, pas quand l’auteur a saisi un extrait manuel.

function projet_longueur_extrait( $longueur ) {
    return 25;
}
add_filter( 'excerpt_length', 'projet_longueur_extrait', 999 );

La priorité élevée (999) n’est pas cosmétique : un thème ou une extension peut déjà avoir accroché ce filtre avec la priorité par défaut de 10, et le dernier filtre exécuté l’emporte. Sur un projet récent, un thème enfant fixait la longueur à 40 mots ; sans priorité forcée, mon filtre à 25 mots était tout simplement ignoré.

Remplacer le « […] » par un vrai lien

Le filtre excerpt_more reçoit la chaîne par défaut (généralement … ou […] selon la version) et permet de la remplacer par n’importe quel balisage, y compris un lien vers l’article.

L'essentiel à retenir : excerpt_length change le nombre de mots ; excerpt_more personnalise le lien ; wp_trim_words gère les extraits manquants
function projet_lien_lire_la_suite( $more ) {
    return sprintf(
        ' <a class="lire-la-suite" href="%s">Lire la suite</a>',
        esc_url( get_permalink() )
    );
}
add_filter( 'excerpt_more', 'projet_lien_lire_la_suite' );

Attention à un piège classique : ce filtre s’applique uniquement dans la boucle (in_the_loop()), sinon get_permalink() peut retourner une URL incorrecte si la fonction est appelée hors contexte, par exemple dans un widget mal placé.

La différence entre extrait manuel et extrait automatique

Un piège fréquent : un rédacteur remplit le champ « Extrait » dans l’écran d’édition, et son texte n’est jamais tronqué ni complété par le lien ajouté via excerpt_more. C’est normal : ce filtre ne s’applique qu’aux extraits générés automatiquement depuis post_content. Pour un extrait manuel, WordPress restitue le texte tel quel, sans troncature ni ajout.

  • Extrait automatique : généré à partir du contenu, tronqué à excerpt_length mots, complété par excerpt_more.
  • Extrait manuel : texte saisi dans le champ dédié, affiché tel quel par the_excerpt(), aucun filtre de longueur appliqué.

Pour uniformiser l’affichage quel que soit le cas, la solution consiste à construire soi-même l’extrait avec wp_trim_words() plutôt que de compter sur the_excerpt().

Construire un extrait maison avec wp_trim_words

La fonction wp_trim_words( $texte, $nombre_de_mots, $suite ) tronque n’importe quelle chaîne à un nombre de mots donné. Elle est pratique pour forcer la même longueur, que l’article ait un extrait manuel ou non.

function projet_extrait_uniforme( $longueur = 20 ) {
    $texte = get_the_excerpt();
    return wp_trim_words( $texte, $longueur, '…' );
}

Dans le fichier de template, on remplace alors the_excerpt(); par echo projet_extrait_uniforme();, ce qui garantit une longueur constante sur la page d’accueil, quel que soit ce que les rédacteurs ont saisi.

Cas particulier des templates de blocs

Sur un thème utilisant des templates de blocs avec le bloc « Extrait », les filtres excerpt_length et excerpt_more continuent de fonctionner puisque le bloc s’appuie en interne sur the_excerpt(). En revanche, il ne propose pas de réglage pour le nombre de mots dans son panneau ; il faut donc toujours passer par PHP pour ce niveau de contrôle fin.

Sur les projets où le client change souvent la longueur voulue, j’expose ce nombre de mots via un filtre nommé, plutôt qu’une valeur codée en dur, pour pouvoir le surcharger depuis un thème enfant sans toucher au plugin principal.

En résumé

Trois leviers couvrent la quasi-totalité des besoins : excerpt_length pour la longueur, excerpt_more pour le lien de fin, et wp_trim_words() quand on veut un contrôle total indépendant de la présence d’un extrait manuel. Ensemble, ils transforment un extrait générique en élément d’interface cohérent avec le reste du site.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi