WordPress : ajouter le temps de lecture d’un article

image_pdf

Pour ajouter le temps de lecture d’un article sur un site WordPress sans utiliser de plugin, vous devrez effectuer quelques étapes manuelles en utilisant du code personnalisé.

Remarque : il est admis qu’en moyenne, nous lisons entre 200 et 250 mots par minute.

Principe : le code va récupérer le contenu de l’article, retirer les balises HTML et texte superflu pour calculer le total de mots. Ce nombre est ensuite divisé par 200 (moyenne des mots lus par minute), puis arrondi à l’entier supérieur.

Voici comment vous pouvez procéder :

Accédez au code source de votre thème WordPress : connectez-vous à votre tableau de bord WordPress et accédez à l’éditeur de thème. Cela se trouve généralement sous Apparence > Éditeur dans le menu de gauche.

Conseil : assurez-vous de travailler avec un thème enfant si possible, pour éviter de perdre vos modifications lors des mises à jour du thème principal.

Modifiez le fichier single.php : le temps de lecture sera affiché sur la page de l’article lui-même. Trouvez le fichier single.php dans votre thème et ouvrez-le pour édition.

/* Calcul du temps de lecture estimé */
 function temps_lecture() {
   global $post;

   // récupérer le contenu de l'article
   $content = get_post_field( 'post_content', $post->ID );

   // compter le nombre de mots en retirant les caractères superflus
   $word_count = str_word_count( strip_tags( $content ) );

   // arrondi à l'entier supérieur de la division du nombre de mots par 200
   $readingtime = ceil($word_count / 200);

   if ($readingtime == 1) {
     $timer = " minute";
   } else {
     $timer = " minutes";
   }

   $totalreadingtime = 'Temps de lecture estimé : ' . $readingtime . $timer;

   return $totalreadingtime;
 }

Faite un appel à la fonction personnalisée temps_lecture() à l’endroit souhaité.

<?php echo temps_lecture(); ?>

Une fois que vous avez ajouté le code, enregistrez les modifications apportées au fichier single.php.

Autre solution : via le hooksave_post‘ de WordPress intégré dans le fichier functions.php de votre thème.

<?php
function montheme_reading_time( $post_id, $post, $update )  {

	// ne pas lancer directement dès le clic sur "ajouter" (en cliquant sur Articles > Ajouter dans l’interface d’administration)
	if( ! $update ) {
    	  return;
	}

	// ne pas executer le code lorsqu'il s'agit d'une révision
	if( wp_is_post_revision( $post_id ) ) {
	  return;
	}

	// éviter les sauvegardes automatiques
	if( defined( 'DOING_AUTOSAVE' ) and DOING_AUTOSAVE ) {
	  return;
	}

	// traiter seulement les articles
        // ou ! in_array( $post->post_type, [ 'post', 'page', 'porfolio' ] ) pour vérifier sur plusieurs types de publications
	if( $post->post_type != 'post' ) {
    	  return;
	}

        // récupérer le contenu de l'article
	$content = $post->post_content;

        // compter le nombre de mots en retirant les caractères superflus
        $word_count = str_word_count(strip_tags($content));

        // arrondi à l'entier supérieur de la division du nombre de mots par 200
        $reading_time_minutes = ceil($word_count / 200);

        // ajouter ou mettre à jour la métadonnée 'reading_time'
        update_post_meta($post_id, 'reading_time', $reading_time_minutes);
}

add_action( 'save_post', 'montheme_reading_time', 10, 3 );

Le hook save_post accepte trois arguments :

  • $post_id (int) : l’identifiant du post qui vient d’être enregistré ou mis à jour.
  • $post (object) : l’objet post qui est en train d’être enregistré ou mis à jour. Cet objet contient toutes les données du post, y compris le contenu, les métadonnées, les titres, les dates, etc.
  • $update (bool) : indique si le post est en train d’être mis à jour (true) ou s’il est en cours de création (false).

Utilisez la valeur du temps de lecture dans le modèle de votre article (single.php) :

<?php

  // récupérer la métadonnée 'reading_time' associée à l'article
  $reading_time = get_post_meta(get_the_ID(), 'reading_time', true);

  echo 'Temps de lecture estimé : ' . $reading_time . ' minutes';

?>

Le troisième paramètre de la fonction get_post_meta(), passé à true, permet d’indiquer que la valeur est unique : il n’y a qu’un seul temps de lecture par article.

Alternative : l’extension Reading Time WP.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.