Il calcolo del tempo di lettura di un articolo è una funzione semplice da scrivere.
Ovviamente esistono plugin che svolgono questa funzione come ad esempio Reading Time WP – non sempre però è necessario aggiungere un altro plugin al tuo sito soprattutto se per raggiungere l’obiettivo finale bastano poche righe di codice.
La logica alla base è:
- isolare il contenuto di un articolo – “the_content()”;
- calcolare quante parole contiene;
- capire quante parole è possibile leggere mediamente in un minuto;
- calcolare e mostrare il rapporto tra il numero di parole e la velocità media di lettura;
Il vantaggio di scrivere in autonomia una funzione in PHP rispetto ad utilizzare un plugin è che possiamo calcolare il tempo di lettura basandoci unicamente sul contenuto dell’articolo oppure possiamo includere nel calcolo anche altri custom field.
Se ad esempio l’articolo è molto strutturato ed è necessaria una gestione di contenuti più complessi del tradizionale blog dovremo necessariamente prendere in considerazione tutti i campi che l’utente finale leggerà.
Qui sotto trovi una semplice funzione in PHP con i commenti.
Puoi inserire questa funzione direttamente nel file functions.php del tuo tema e modificarla in base alle tue necessità.
function acf_repeater_word_count() { // recupero l’ID del post global $post; $post_id = $post->ID; // dichiaro un array nel quale raccoglierò sia the_content che eventuali custom field $content = array(); // in questo caso i custom field aggiuntivi sono all’interno di un repeater di ACF if ( have_rows( 'nuovo_modulo', $post_id ) ) : while ( have_rows( 'nuovo_modulo', $post_id ) ) : the_row(); // il repeater utilizza diversi moduli $tipo_modulo = get_sub_field( 'tipo_modulo', $post_id ); switch ( $tipo_modulo ) { // quando trovo il modulo di testo, l’unico che ci interessa, aggiungo il suo contenuto all’array case ‘mod_testo’ : $content[] = get_sub_field( 'modulo_testo', $post_id ); break; } endwhile; endif; // aggiungo all’array anche il contenuto principale del post $content[] = get_the_content(); // faccio il conteggio delle parole assicurandomi di serializzare la variabile $total_words = str_word_count( serialize($content) ); // dichiaro il valore ipotetico di lettura parole/minuto $words_per_minute = 180; // calcolo il tempo di lettura media basato sul contenuto, assicurandomi di eliminare i decimali $average_reading_time = ceil( $total_words / $words_per_minute); // restituisco il risultato aggiungendo il simbolo dei muniti primi ‘'’ echo $average_reading_time . '''; }