Eu vi há alguns dias um site fornecendo um pouco de informação extra no topo da página: o tempo estimado para ler a página . Achei engraçado e queria criar algo semelhante usando um shortcode do WordPress .
Isso é muito fácil de fazer, então vamos começar!
Etapa 1: criar um plug-in
Como de costume, vamos criar um plugin, então, crie uma nova pasta em wp-content/plugins e chame-a de ” post-reading-duration-shortcode “, abra-a e crie um arquivo chamado ” post-reading-duration -shortcode.php “. Abra o arquivo e cole este código:
<?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
*/
Depois de salvar o arquivo, você deverá ver a lista de plug-ins na página de plug-ins.
Etapa 2: criar o código de acesso
Basicamente, o plugin fornecerá um código de acesso simples sem atributo. O texto será encapsulado entre as próprias tags de código de acesso. O código de acesso exibirá no frontend o tempo que os visitantes precisam para ler o post. Para criar o shortcode, use este código:
/**
* 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”);
Você pode salvar o arquivo. Se você adicionar a um post ou página o shortcode [reading_duration]Estimated reading time: XX[/reading_duration] , ele deverá mostrar “Estimated reading time: XX” encapsulado em uma tag “span”.
O próximo passo é modificar o shortcode para exibir o tempo real estimado necessário para ler a página ou o post, de acordo com um número predefinido de palavras lidas por minuto.
Para fazer isso, temos que fazer o código de atalho evoluir. Precisamos obter o ID do post (para recuperar o número de palavras no post usando str_word_count() ), e precisamos definir um número de palavras que as pessoas costumam ler em um minuto. Digamos 200 palavras por minuto.
/**
* 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”);
Etapa 3: a função do contador
Como você pode ver, há uma função indefinida: rc_prds_get_post_reading_time(). Esta é a função que retornará o tempo estimado que você precisa para ler o post. Vamos criar:
/**
* 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;
}
Basicamente, a função conta o número de palavras em “get_the_content()”, então conta o número de minutos e segundos necessários para ler o post. A última parte é apenas uma maneira simples de exibir a mensagem correta dependendo dos valores de $minutos e $segundos.
Poderíamos ir mais longe e adicionar horas necessárias para ler o post, mas não tenho 100% de certeza de que seja obrigatório!
Agora você pode usar totalmente o shortcode simplesmente adicionando:
[reading_duration]Estimated Reading Time:[/reading_duration]