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 hook ‘save_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.