Ottenere l'estratto da $post->post_content

26 mag 2017, 03:51:11
Visualizzazioni: 16.4K
Voti: 5

Sto modificando l'output di un plugin utilizzando un filtro e ho a disposizione la variabile $post, quindi posso visualizzare il contenuto del post così:

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

Tuttavia, il codice sopra mostra solo l'estratto se è stato inserito del contenuto nel campo apposito. Non mostra una versione troncata del contenuto come farebbe se potessi usare "the_excerpt" o "get_the_excerpt". Ho anche provato:

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

Ma questo restituisce semplicemente il contenuto completo del post.

E ho provato anche questo:

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

Ma non restituisce nulla.

Esiste un modo per ottenere l'estratto dal contenuto completo quando non posso usare the_excerpt o get_the_excerpt?

Grazie!

2
Commenti

Per impostazione predefinita, WordPress dovrebbe prendere le prime 55 parole di the_content per servire come the_excerpt se nessuno è definito esplicitamente.

Cedon Cedon
26 mag 2017 04:07:20

Corretto. Ma in questo caso non posso usare the_content o the_excerpt. Devo usare $post->post_content o $post->post_excerpt.

LBF LBF
26 mag 2017 04:10:26
Tutte le risposte alla domanda 1
0
10

Quando sei nel loop, questo produrrà direttamente un estratto dal $post->post_content:

<?php echo wp_trim_excerpt(); ?>

Leggi di più QUI.

Soluzione Alternativa:

Se non sei nel loop, puoi utilizzare un'implementazione simile a quella della funzione 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 mag 2017 04:14:21