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.
Índice de contenidos
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
, opage.php
osingle.php
, inclusoarchive.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.
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!
Hola! Como podriamos añadir los puntos suspensivos, pero controlando por palabras, no por caracteres.
Gracias