wp_trim_words() no recorta the_content() en WordPress

8 mar 2019, 10:01:17
Vistas: 20.4K
Votos: 4

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?

0
Todas las respuestas a la pregunta 1
3
11

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);
?>
8 mar 2019 10:11:34
Comentarios

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

teccraft teccraft
8 mar 2019 10:45:12

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

teccraft teccraft
8 mar 2019 12:38:05

¡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ó.

Eric Hepperle - CodeSlayer2010 Eric Hepperle - CodeSlayer2010
19 mar 2025 21:28:06