Tiempo de lectura: 3 min
Valencia, 19/08/2026, G.B.
Si alguna vez has visto en un blog un texto como «5 min de lectura» justo encima del contenido de una entrada, seguramente te hayas preguntado cómo se calcula. La buena noticia es que no hace falta instalar ningún plugin para conseguirlo: con una función sencilla en el functions.php del tema hijo es suficiente.
La idea detrás del cálculo
El tiempo de lectura estimado se basa en un cálculo muy simple: se cuenta el número de palabras del contenido y se divide entre una velocidad media de lectura, normalmente entre 200 y 250 palabras por minuto. No es una ciencia exacta, pero da una idea útil y realista al lector sobre cuánto tiempo le va a llevar la entrada.
La función paso a paso
Lo primero es una función que calcule ese tiempo a partir del contenido del post:
function indaga_calculate_reading_time( $post_id = null ) {
if ( ! $post_id ) {
$post_id = get_the_ID();
}
$content = get_post_field( 'post_content', $post_id );
$content = strip_shortcodes( $content );
$content = wp_strip_all_tags( $content );
preg_match_all( '/[\p{L}\p{N}]+/u', $content, $matches );
$word_count = count( $matches[0] );
$reading_time = ceil( $word_count / 200 );
if ( $reading_time < 1 ) {
$reading_time = 1;
}
return $reading_time;
}Merece la pena detenerse en un par de detalles. Antes de contar palabras, se eliminan los shortcodes y las etiquetas HTML con strip_shortcodes() y wp_strip_all_tags(), para no contar código como si fuera texto. Y el conteo de palabras se hace con una expresión regular UTF-8 (preg_match_all con el patrón /[\p{L}\p{N}]+/u) en lugar de la función nativa str_word_count(), porque esta última no reconoce bien acentos ni la letra «ñ», algo imprescindible al trabajar con contenido en castellano.
Mostrarlo automáticamente en cada entrada
Con el cálculo ya resuelto, el siguiente paso es mostrarlo sin tener que tocar ninguna plantilla del tema. Para eso se engancha a un filtro que WordPress ya tiene previsto: the_content.
function indaga_add_reading_time_to_content( $content ) {
if ( is_single() && in_the_loop() && is_main_query() && 'post' === get_post_type() ) {
$reading_time = indaga_calculate_reading_time();
$notice = '<p class="indaga-reading-time">Tiempo de lectura: ' . $reading_time . ' min</p>';
$content = $notice . $content;
}
return $content;
}
add_filter( 'the_content', 'indaga_add_reading_time_to_content' );
Las tres comprobaciones dentro del if son las que marcan la diferencia entre que esto funcione bien o dé problemas: is_single() asegura que solo se muestre en la página individual de una entrada, in_the_loop() y is_main_query() evitan que el aviso aparezca duplicado en widgets, feeds o bucles secundarios, y la comprobación del tipo de contenido lo limita a entradas de blog, dejando fuera páginas u otros tipos de contenido.
Personalizar el estilo
El aviso se genera con la clase CSS indaga-reading-time, así que basta con añadir unas líneas al style.css del tema hijo para darle el aspecto deseado, por ejemplo:
.indaga-reading-time {
font-style: italic;
color: #666;
margin-bottom: 1em;
}En resumen
Con menos de treinta líneas de código, sin dependencias externas y sin necesidad de un plugin adicional, es posible añadir una funcionalidad que mejora la experiencia de lectura y encaja perfectamente con la filosofía de mantener el sitio ligero y bajo control propio.
Nota: Descargar de mi cuenta pCloud el código completo (en formato .txt)


