wp_trim_words() no recorta the_content() en WordPress
En mi sitio web WordPress, quiero mostrar un texto corto de cada blog_post en la plantilla personalizada del blog. Quiero mostrar un botón Leer Más
con un enlace al post al final para que el usuario pueda hacer clic en ese enlace y ver el post completo.
Pero siempre obtengo el post completo en lugar de su resumen.
Aquí está mi código:
$moreLink = '<a href="' . the_permalink() . '"> Leer Más...</a>';
$wp_query = new WP_Query();
while ($wp_query->have_posts()) : $wp_query->the_post(); ?>
<h2><a href="<?php the_permalink(); ?>" title="Leer más"><?php the_title(); ?></a></h2>
<?php the_excerpt(); ?>
<?php echo wp_trim_words( the_content(), 55, $moreLink); ?>
<?php endwhile; ?>
He probado diferentes códigos en lugar de wp_trim_words(the_content(), 55, $moreLink);
encontrados en línea sin éxito. Incluso he usado la misma línea de código en otra plantilla personalizada y funciona bien. Sin embargo, con esta plantilla no está funcionando.
¿Estoy cometiendo algún error en mi código?

El problema está en esta línea:
<?php echo wp_trim_words( the_content(), 55, $moreLink); ?>
Estás llamando la función the_content
allí. Esta función imprime todo el contenido y no retorna nada. Significa que primero imprimes el contenido, y luego pasas una cadena vacía a wp_trim_words
.
Debería ser:
<?php echo wp_trim_words( get_the_content(), 55, $moreLink); ?>
Ten cuidado porque, como se describe en el codex, get_the_content()
no pasa el contenido por el filtro 'the_content'. Esto significa que no ejecutará los shortcodes. Si quieres obtener exactamente lo que imprime the_content()
, debes usar:
<?php
$my_content = apply_filters( 'the_content', get_the_content() );
echo wp_trim_words( $my_content, 55, $moreLink);
?>
Sugiero también usar wp_strip_all_tags()
, de lo contrario podrías tener problemas con etiquetas HTML que quedaron abiertas al recortar el texto.
Ejemplo completo:
<?php
$my_content = apply_filters( 'the_content', get_the_content() );
$my_content = wp_strip_all_tags($my_content);
echo wp_trim_words( $my_content, 55, $moreLink);
?>

Funciona pero en lugar del contenido real, me muestra el shortcode de la publicación como este.

@Sr. Cariol Gracias por tu respuesta. La solución que proporcionaste funciona bien.

¡Gracias Krysiek por esta explicación! Aunque estaba usando get_the_content()
en mi caso, aún no funcionaba hasta que apliqué el "ejemplo completo" que proporcionaste. De alguna manera requiere apply_filters() y/o wp_strip_all_tags(). Parece un poco enrevesado, pero es lo único que funcionó.
