WordPress: calcolo del tempo di lettura di un articolo in PHP senza usare plugin

CodeTutorial | di: Giovanni Invernizzi

1 Febbraio 2019 — Tempo di lettura: 2'

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 . ''';
    
}

Una volta personalizzata questa funzione puoi richiamarla da un articolo (o da pagina o da CPT) semplicemente usando

<?php acf_repeater_word_count(); ?>

Articoli correlati

Vuoi spiccare il volo insieme a noi?

    info@paperplanefactory.com
    +39 339 54 36 752




    Invia