Come ottenere 'post_content' senza rimuovere i tag <p>?

16 ott 2014, 15:17:21
Visualizzazioni: 71.9K
Voti: 28

Sto cercando di recuperare il contenuto di uno specifico post:

$post = get_post(/* id */);
$content = $post->post_content;

Tuttavia, questo recupera il contenuto senza interruzioni di riga e omette tutti i tag <p>.

Qual è il modo corretto per recuperare il contenuto del post senza rimuovere i tag <p> (come viene mostrato nella pagina del post o nella scheda "Testo" dell'editor del post)?

0
Tutte le risposte alla domanda 3
1
43

Entrambe le risposte fornite finora sono corrette, ma sembra necessaria una spiegazione più approfondita.

Se utilizzi questo:

$content = wpautop( $post->post_content );

stai applicando la funzione che aggiunge i tag di paragrafo al contenuto del post. wpautop() è una delle molte funzioni (incluse a volte le funzioni dei plugin) che si agganciano a the_content, quindi se fai questo:

$content = apply_filters('the_content', $post->post_content);

otterrai il contenuto del post processato da tutti i filtri collegati a the_content, che include wpautop() di default.

Infine, se sei nel loop, puoi semplicemente fare:

$content = apply_filters( 'the_content', get_the_content() );

che essenzialmente è un wrapper per il secondo snippet di codice, ma ovviamente è più elegante. Aggiornamento 1 Set 2018: Revisione basata su commento. Riconoscimenti a @timmb.

In generale, direi che il modo "corretto" preferito per farlo è dall'ultimo al primo, poiché l'uso di una funzione core di WP dovrebbe garantire una maggiore compatibilità all'indietro (almeno in teoria). L'unica altra decisione da prendere è se vuoi permettere a WordPress e ai plugin di modificare anche il contenuto del post. Se è questo il caso, usa sicuramente la 2a o 3a opzione.

16 ott 2014 18:11:59
Commenti

Penso che questa soluzione finale sia errata. Da https://codex.wordpress.org/Function_Reference/get_the_content: "Una differenza importante rispetto a the_content() è che get_the_content() non passa il contenuto attraverso il filtro 'the_content'".

Questo non suggerirebbe che l'approccio corretto sarebbe $content = apply_filters('the_content', get_the_content);?

Tim MB Tim MB
1 set 2017 14:00:22
0

Trovata la soluzione:

$content = apply_filters('the_content', $post->post_content);
16 ott 2014 15:21:09
1

Il secondo metodo per ottenere il contenuto del post con il tag p è

echo wpautop( $post->post_content );
16 ott 2014 17:04:49
Commenti

Come potrei adattarlo a questo? <?php $term = get_queried_object(); /*** echo $term->slug; ***/ ?> <span class="entry-content"> <?php $page = get_posts([ 'name' => $term->slug, 'post_type' => 'page' ]); if ( $page ){ echo $page[0]->post_content; } ?> </span>

Pete Pete
9 dic 2021 06:14:46