Obtener extracto de $post->post_content en WordPress

26 may 2017, 03:51:11
Vistas: 16.4K
Votos: 5

Estoy modificando la salida de un plugin usando un filtro, y tengo disponible la variable $post, por lo que puedo mostrar el contenido del post así:

<h3><?php echo $post->post_title; ?></h3>
<?php echo apply_filters( 'the_excerpt', $post->post_excerpt ); ?>

Sin embargo, lo anterior solo muestra el extracto si se ha ingresado contenido en el campo de extracto. No muestra una versión truncada del contenido como lo haría si pudieras usar "the_excerpt" o "get_the_excerpt". También probé:

<?php echo apply_filters( 'the_excerpt', $post->post_content ); ?>

Pero eso solo obtiene el contenido completo del post.

Y probé esto:

<?php echo apply_filters('the_excerpt', get_post_field('post_excerpt', $post->ID)); ?>

Pero eso no devuelve nada.

¿Hay alguna manera de obtener el extracto del contenido completo de $post cuando no puedo usar the_excerpt o get_the_excerpt?

¡Gracias!

2
Comentarios

Por defecto, WordPress debería tomar las primeras 55 palabras de the_content para servir como the_excerpt si no se define explícitamente uno.

Cedon Cedon
26 may 2017 04:07:20

Correcto. Pero no puedo usar the_content o the_excerpt en este caso. Tengo que usar $post->post_content o $post->post_excerpt.

LBF LBF
26 may 2017 04:10:26
Todas las respuestas a la pregunta 1
0
10

Cuando estás en el loop, esto generará un extracto directamente desde $post->post_content:

<?php echo wp_trim_excerpt(); ?>

Lee más AQUÍ.

Solución alternativa:

Si no estás en el loop, entonces puedes usar una implementación similar a la realizada en la función wp_trim_excerpt:

$text = strip_shortcodes( $post->post_content );
$text = apply_filters( 'the_content', $text );
$text = str_replace(']]>', ']]&gt;', $text);
$excerpt_length = apply_filters( 'excerpt_length', 55 );
$excerpt_more = apply_filters( 'excerpt_more', ' ' . '[&hellip;]' );
$text = wp_trim_words( $text, $excerpt_length, $excerpt_more );
echo $text;
26 may 2017 04:14:21