J’ai vu il y a quelques jours un site internet fournissant un petit complément d’information en haut de page : le temps estimé pour lire la page. J’ai trouvé ça drôle et je voulais créer quelque chose de similaire en utilisant un WordPress petit code.
C’est assez facile à faire, alors commençons!
Étape 1 : Créer un plugin
Comme d’habitude nous allons créer un plugin, donc, créez un nouveau dossier sous wp-contenu/plugins, et l’appeler « post-lecture-durée-shortcode« , ouvrez-le et créez un fichier appelé « post-lecture-duration-shortcode.php« . Ouvrez le fichier et collez ce code :
<?php
/*
Plugin Name: Post Reading Duration Shortcode
Plugin URL: http://remicorson.com/
Description: Display the estimated time to read the post
Version: 0.1
Author: Remi Corson
Author URI: http://remicorson.com
Contributors: corsonr
Text Domain: rc_prds
Domain Path: languages
*/
Une fois que vous avez enregistré le fichier, vous devriez voir la liste des plugins sur la page des plugins.
Étape 2 : créer le shortcode
Fondamentalement, le plugin fournira un shortcode simple sans attribut. Le texte sera encapsulé entre les balises shortcode elles-mêmes. Le shortcode affichera sur le frontend le temps dont les visiteurs ont besoin pour lire le message. Pour créer le shortcode, utilisez ce code :
/**
* Register the shortcode
*
* @access public
* @since 1.0
* @return void
*/
function rc_prds_add_reading_duration_shortcode( $atts, $content = null ) {
return '<span class="reading_duration">'.$content.'</span>';
}
add_shortcode("reading_duration", "rc_prds_add_reading_duration_shortcode");
Vous pouvez enregistrer le fichier. Si vous ajoutez à un article ou à une page le shortcode [reading_duration]Temps de lecture estimé : XX[/reading_duration], il doit afficher « Temps de lecture estimé : XX » encapsulé dans une balise « span ».
L’étape suivante consiste à modifier le shortcode pour afficher le temps réel estimé nécessaire pour lire la page ou le post, selon un nombre prédéfini de mots lus par minute.
Pour ce faire, nous devons faire évoluer le code du shortcode. Nous devons obtenir l’ID du message (pour récupérer le nombre de mots dans le message en utilisant str_word_count()), et nous devons définir un nombre de mots que les gens lisent habituellement en une minute. Disons 200 mots par minute.
/**
* Register the shortcode
*
* @access public
* @since 1.0
* @return void
*/
function rc_prds_add_reading_duration_shortcode( $atts, $content = null ) {
global $post;
// Get Post ID
$post_id = $post->ID;
// Words read per minute (you can set your own value)
$words_per_minute = 200;
// Get estimated time
$estimated_reading_time = rc_prds_get_post_reading_time( $post_id, $words_per_minute );
return '<span class="reading_duration">'.$content.' '.$estimated_reading_time.'</span>';
}
add_shortcode("reading_duration", "rc_prds_add_reading_duration_shortcode");
Étape 3 : la fonction compteur
Comme vous pouvez le voir, il existe une fonction non définie : rc_prds_get_post_reading_time(). C’est la fonction qui renverra le temps estimé dont vous avez besoin pour lire le message. Créons-le :
/**
* Get post reding time
*
* @access public
* @since 1.0
* @return void
*/
function rc_prds_get_post_reading_time( $post_id, $words_per_minute ){
// Get post's words
$content = get_the_content( $post_id );
$count_words = str_word_count( strip_tags( $content ) );
// Get Estimated time
$minutes = floor( $count_words / $words_per_minute);
$seconds = floor( ($count_words / ($words_per_minute / 60) ) - ( $minutes * 60 ) );
// If less than a minute
if( $minutes < 1 ) {
$estimated_time = __( 'Less than a minute', 'rc_prds' );
}
// If more than a minute
if( $minutes >= 1 ) {
if( $seconds > 0 ) {
$estimated_time = $minutes.__( 'min', 'rc_prds' ).' '.$seconds.__( 'sec', 'rc_prds' );
} else {
$estimated_time = $minutes.__( 'min', 'rc_prds' );
}
}
return $estimated_time;
}
Fondamentalement, la fonction compte le nombre de mots dans « get_the_content() », puis compte le nombre de minutes et de secondes nécessaires pour lire le message. La dernière partie est juste un moyen simple d’afficher le message correct en fonction des valeurs de $minutes et $seconds.
On pourrait aller plus loin, et rajouter des heures nécessaires pour lire le post mais je ne suis pas sûr à 100% que ce soit obligatoire !
Vous pouvez maintenant utiliser pleinement le shortcode en ajoutant simplement :
[reading_duration]Estimated Reading Time:[/reading_duration]