Content

Hace cinco años ya hablábamos de cómo mostrar el excerpt (resumen) de forma automática y en esa ocasión recomendábamos el plugin Advanced Excerpt para mostrar algo más que texto plano en el resumen de nuestras entradas.

Desde entonces el autor del plugin ha ido actualizando hasta llegar a la versión actual (4.2.3) pero en el camino se olvidó de mantener la funcionalidad de la opción "Remove shortcodes from the excerpt. (recommended)".

¿Y cuál es el problema? Por lo pronto, digamos que es conveniente eliminar los shortcodes del resumen pero no podemos hacerlo debido a dicho error en el plugin.

En segundo lugar, puede ocurrir que en el resumen aparezca texto que no deseemos que lo haga. Por ejemplo, la leyenda (caption) de una imagen. Y eso es lo que sucede cuando la imagen está colocada en la parte superior de la entrada. En concreto, aparecerá siempre y cuando ese texto se encuentre dentro del rango de palabras que hayamos marcado en el plugin para mostrar en el resumen.

Cuando insertamos una imagen con leyenda es como si utilizáramos un shortcode ya que el código comienza con un corchete. La imagen propiamente dicha no aparece porque su etiqueta es <img> y ésta sí la neutraliza el plugin. Sin embargo, la leyenda se mantiene entre corchetes por lo que sí se muestra en el resumen.

Veamos dos imágenes para ilustrar el problema:

Advanced excerpt. Imagen en la parte superior de una entrada
Imagen en la parte superior de una entrada
Advanced excerpt. Resumen en el index. Se aprecia el error (la leyenda no debería salir)
Resumen en el index. Se aprecia el error (la leyenda no debería salir)

¿Cómo podemos solucionar el problema? Muy fácil:

1 ) Editamos el archivo "advanced-excerpt.php" que se encuentra en la carpeta "class" (no confundir con el archivo del mismo nombre que se encuentra en la raíz del plugin).

2) Buscamos las líneas 242 y 243

$text = get_the_content( '' );
$text = apply_filters( 'the_content', $text );

y las sustituimos por

$text = get_the_content( '' );
if(1 == $no_shortcode)
$text = strip_shortcodes($text);
$text = apply_filters('the_content', $text);

De esta forma, los shortcodes serán eliminados del resumen (y la leyenda dejará de mostrarse) si marcamos la opción "Remove shortcodes from the excerpt. (recommended)".

ACTUALIZACIÓN SEP/2018: la versión 2.4.5 resuelve este problema.

Estos últimos meses he dedicado buena parte del tiempo a profundizar en WordPress (y PHP) con el fin de personalizar la plantilla e incorporar nuevas funcionalidades. Intentaré a partir de ahora ofrecer los lunes trucos sencillos. Aquí tienen el primero de ellos:

En el editor de texto de WordPress aparece la opción "Insertar etiqueta More" que nos permite "cortar" la entrada en el punto que deseamos. De esta forma, aún cuando usemos "the_content" no se mostrará la entrada completa sino solo la parte definida por la mencionada etiqueta.

Existe, no obstante, una forma para hacerlo de forma automática en función del número de palabras que contenga la entrada:

<?php
global $post;
$numcontent = str_word_count($post->post_content);
if ($numcontent > 200) {
echo the_excerpt();
} else {
echo the_content();
}
?>

Si la entrada tiene más de 200 palabras, se muestra un resumen. En caso contrario, todo el texto. El código debe añadirse en The Loop, y lo normal sería incluirlo en "index.php" y "archive.php".

Ahora bien, la función "the_excerpt" presenta un problema, a saber, devuelve texto plano. Esto significa que negritas, cursivas, enlaces o cualquier otra etiqueta HTML desaparece. Para solucionarlo es aconsejable usar el plugin Advanced Excerpt. Su configuración es muy sencilla y permite seleccionar las etiquetas HTML que aparecerán en el resumen.

Actualización Mayo 2017

La opción para eliminar los shortcodes (y la leyenda de las imágenes) del mencionado plugin no funciona. En esta otra entrada explico como solucionarlo.