Obtener extracto de $post->post_content en WordPress
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!

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(']]>', ']]>', $text);
$excerpt_length = apply_filters( 'excerpt_length', 55 );
$excerpt_more = apply_filters( 'excerpt_more', ' ' . '[…]' );
$text = wp_trim_words( $text, $excerpt_length, $excerpt_more );
echo $text;
