Cómo personalizar la longitud de los extractos por caracteres, palabras o párrafos

Uno de los elementos de todo contenido en WordPress es el extracto de las entradas y páginas, que normalmente viene definido en el tema mediante las funciones the_excerpt() y get_the_excerpt(), que aquí vamos a aprender a manipular.

Cómo funciona the_excerpt() por defecto

Para ponernos en antecedentes, antes conviene aclarar el funcionamiento de la función the_excerpt().

Básicamente, al insertarla en el loop de WordPress, normalmente en sustitución de la función the_content() corta el contenido de la publicación, muestra las 55 primeras palabras del mismo y, a continuación, cierra con algún tipo de texto, puntos suspensivos, lo que sea.

Así, por ejemplo:

<div class="entry-content">
        <?php the_excerpt(__('Sigue leyendo', 'ejemplo')); ?>
</div>

Cómo cambiar la longitud del extracto por cantidad de palabras

Para esta primera personalización usaremos el filtro excerpt_length.

Un ejemplo sería así:

//Extracto más largo por cantidad de palabras
function ayudawp_extracto_palabras( $length ) {
	// No cambiar nada dentro de /wp-admin/
	if ( is_admin() ) {
		return $length;
	}
	// Configuramos el extracto a 110 palabras
	return 110;
}
// La prioridad "999" hace que esto se ejecute al final del resto de funciones con gancho a este filtro, pues las sobreescribe
add_filter( 'excerpt_length', 'ayudawp_extracto_palabras', 999 );

Como ves en el código, que creo que se explica solo, tras el condicional para evitar la ejecución de la función dentro de la administración, se define un return con el número de palabras para, con el filtro excerpt_length aplicar la nueva longitud por palabras, en el ejemplo 110, justo el doble que por defecto.

Cómo cambiar la longitud del extracto por cantidad de caracteres

Ahora bien, imagina que no quieres hacer el corte por palabras sino por caracteres.

Esto es más común de lo que imaginas, pues si tu tema muestra los extractos dentro de una caja o estilo, es mejor controlar los caracteres, para que todas las cajas tengan el mismo tamaño.

Se haría así:

//Extracto más largo por cantidad de caracteres
function ayudawp_extracto_caracteres( $text ) {
	if( is_admin() ) {
		return $text;
	}
	// Primero recuperamos el contenido
	$text = get_the_content();
	// Le quitamos los shortcodes, por si acaso
	$text = strip_shortcodes( $text );
	
	// Y obtenemos los primeros 110 caracteres
	$text = substr( $text, 0, 110 );

	// Y luego añadimos la etiqueta del sigue leyendo, en este caso 3 puntos suspensivos
	$text .= '…';
	return $text;
}
// Deja la prioridad por defecto de 10 para permitir más filtros
add_filter( 'wp_trim_excerpt', 'ayudawp_extracto_caracteres', 10, 1 );

En este caso hemos usado otro filtro, wp_trim_excerpt, que nos permite recortar el contenido por los caracteres que le indiquemos tras recuperar primero el contenido.

Para complementar el código he añadido un filtro para quitar los shortcodes (strip_shortcodes), que siempre quedan feos en los extractos.

Cómo cambiar la longitud del extracto por párrafos

Otro uso del filtro wp_trim_excerpt que hemos visto en el ejemplo anterior es utilizarlo para cortar el contenido, no ya por caracteres, sino tras un elemento concreto, en este caso la etiqueta HTML de cierre de párrafo.

Sería tal que así:

//Extracto cortado tras primer párrafo
function ayudawp_extracto_parrafo( $text ) {
	if( is_admin() ) {
		return $text;
	}
	// Obtenemos el contenido con apply_filters para obtener las etiquetas <p>
	$content = apply_filters( 'the_content', get_the_content() );
	
	// Paramos después de la primera etiqueta </p>
	$text = substr( $content, 0, strpos( $content, '</p>' ) + 4 );
	return $text;
}
// Deja la prioridad por defecto de 10 para permitir más filtros
add_filter( 'wp_trim_excerpt', 'ayudawp_extracto_parrafo', 10, 1 );

Y ya lo tienes. El extracto mostrará texto hasta que hagas el primer salto de párrafo (</p>). Por supuesto, también funciona con el contenido dentro de bloques del editor.

¿Dónde meto estos códigos?

Pues tenemos básicamente 3 posibilidades:

  • Si vas a usar estas funciones solo en alguna parte concreta de tu tema deberían ir en el código de los archivos index.php, o page.php o single.php, incluso archive.php, category.php, tag.php, author.php, allí donde se muestren contenidos.
  • Por otra parte, si quieres que se apliquen globalmente, en todo el tema, deberás añadirlas en el archivo functions.php del mismo, o de su tema hijo (ya sabes, siempre mejor con tema hijo)
  • Y, si vas a usar estas funciones – lo que hacen – en cualquier tema que instales/actives, entonces añádelas a tu plugin de personalizaciones.

 

VALORA Y COMPARTE ESTE ARTÍCULO PARA MEJORAR LA CALIDAD DEL BLOG…
(5 votos, promedio: 5)

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

 

Ir arriba Ir al contenido