vendredi 25 septembre 2026

À propos

Contact

Tips

Afficher un temps de lecture estimé sur vos articles, sans extension

Calculez le temps de lecture à partir du contenu nettoyé, mettez-le en cache dans une meta, et affichez-le dans le thème ou un bloc personnalisé.

Par Clément Hadrot • 30 mai 2024 • 4 min de lecture • Aucun commentaire
Afficher un temps de lecture estimé sur vos articles, sans extension

Un blog de recettes de cuisine que j’ai repris comptait une bonne dizaine d’extensions installées, dont une uniquement pour afficher « 4 min de lecture » en haut de chaque article. Cette fonctionnalité, à première vue anodine, chargeait pourtant son propre fichier CSS et JS sur chaque page. Le calcul qu’elle effectuait tenait pourtant en une dizaine de lignes de PHP, sans dépendance externe.

Voici comment reproduire ce calcul proprement, avec une mise en cache pour ne pas recompter les mots à chaque chargement de page.

Calculer le temps de lecture

Le principe : nettoyer le contenu de ses balises HTML et shortcodes, compter les mots, puis diviser par une vitesse de lecture moyenne, généralement estimée entre 200 et 250 mots par minute pour un adulte lisant du français courant.

function calculer_temps_lecture( $post_id ) {
    $contenu = get_post_field( 'post_content', $post_id );
    $contenu = strip_shortcodes( $contenu );
    $contenu = wp_strip_all_tags( $contenu );

    $nombre_mots = str_word_count( $contenu );
    $mots_par_minute = 200;

    $minutes = (int) ceil( $nombre_mots / $mots_par_minute );

    return max( 1, $minutes );
}

La fonction native str_word_count() de PHP reste approximative sur du texte contenant des mots composés ou des caractères accentués mal reconnus selon la configuration de locale du serveur ; pour un comptage plus fiable, un simple preg_split( '/\s+/u', trim( $contenu ) ) compte les segments séparés par des espaces, ce qui est suffisant pour une estimation.

Mettre le résultat en cache dans une meta

Recalculer ce chiffre à chaque affichage de page revient à parcourir l’intégralité du contenu à chaque visite, un gaspillage inutile. On enregistre plutôt le résultat dans une meta, recalculée uniquement lors de l’enregistrement de l’article :

L'essentiel à retenir : Calcul basé sur le nombre de mots réels du contenu ; Mise en cache en meta pour éviter un recalcul à chaque affichage ; Recalcul automatique à chaque enregistrement
add_action( 'save_post_post', function ( $post_id ) {
    if ( wp_is_post_revision( $post_id ) || defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return;
    }

    $minutes = calculer_temps_lecture( $post_id );
    update_post_meta( $post_id, '_temps_lecture_minutes', $minutes );
} );

function obtenir_temps_lecture( $post_id ) {
    $minutes = get_post_meta( $post_id, '_temps_lecture_minutes', true );

    if ( '' === $minutes ) {
        $minutes = calculer_temps_lecture( $post_id );
        update_post_meta( $post_id, '_temps_lecture_minutes', $minutes );
    }

    return (int) $minutes;
}

Afficher le résultat dans le thème

L’affichage se résume ensuite à un appel simple dans le fichier de template, par exemple juste après le titre de l’article :

<p class="temps-lecture">
    <?php
    printf(
        esc_html( _n( '%d minute de lecture', '%d minutes de lecture', obtenir_temps_lecture( get_the_ID() ), 'mon-theme' ) ),
        obtenir_temps_lecture( get_the_ID() )
    );
    ?>
</p>

L’intégrer comme un bloc plutôt qu’en dur dans le template

Pour un site utilisant l’éditeur de site (FSE) et un thème basé sur theme.json, il est possible d’aller plus loin en créant un petit bloc dynamique dont le rendu appelle obtenir_temps_lecture(), ce qui permet aux rédacteurs de le positionner librement dans leurs modèles plutôt que de le figer dans le code du thème.

  • Un bloc dynamique s’enregistre avec register_block_type() et un fichier render.php qui appelle la fonction de calcul.
  • Cette approche évite de dupliquer la logique d’affichage dans plusieurs fichiers de template.
  • Elle reste compatible avec un affichage conditionnel selon le type de contenu.

Avant d’installer une extension pour une fonctionnalité d’une dizaine de lignes de PHP, je vérifie toujours si le calcul ne peut pas simplement vivre dans une extension maison légère, sans dépendance ni fichier CSS superflu.

En résumé

Un temps de lecture estimé n’a rien de sorcier : un comptage de mots, une division, une mise en cache en meta pour ne pas recalculer à chaque affichage. Cette approche évite une extension complète pour un résultat identique, tout en restant entièrement personnalisable dans son affichage et son message.

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