Cum să obții 'post_content' fără a elimina tag-urile <p>?

16 oct. 2014, 15:17:21
Vizualizări: 71.9K
Voturi: 28

Încerc să preiau conținutul unei postări specifice:

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

Cu toate acestea, această metodă preia conținutul fără întreruperi de linie și omite toate tag-urile <p>.

Care este modalitatea corectă de a prelua conținutul postării fără a elimina tag-urile <p> (așa cum este afișat pe pagina postării sau în tab-ul "Text" din editor)?

0
Toate răspunsurile la întrebare 3
1
43

Ambele răspunsuri de până acum sunt corecte, dar pare necesar un răspuns mai detaliat.

Dacă folosești această abordare:

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

aplici funcția care adaugă tag-uri de paragraf conținutului articolului. wpautop() este una dintre multiplele funcții (inclusiv unele din plugin-uri) care se atașează la the_content, așadar dacă folosești:

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

vei obține conținutul articolului procesat prin toate filtrele atașate la the_content, care implicit include și wpautop().

În final, dacă ești în loop, poți folosi simplu:

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

care este practic un wrapper pentru al doilea fragment de cod, dar cu o sintaxă mai elegantă. Actualizare 1 Sep 2018: Revizuit pe baza comentariului. Mulțumiri @timmb.

În general, aș spune că metoda "corectă" preferată este de la ultima la prima variantă, deoarece utilizarea unei funcții native din WordPress ar trebui să asigure mai multă compatibilitate înapoi (teoretic, cel puțin). Singura altă decizie de luat este dacă dorești să permiți WordPress-ului și plugin-urilor să modifice și ei conținutul articolului. Dacă acesta este cazul, cu siguranță folosește a 2-a sau a 3-a variantă.

16 oct. 2014 18:11:59
Comentarii

Cred că această soluție finală este incorectă. Conform https://codex.wordpress.org/Function_Reference/get_the_content : "O diferență importantă față de the_content() este că get_the_content() nu trece conținutul prin filtrul 'the_content'."

Nu ar sugera acest lucru că abordarea corectă ar fi $content = apply_filters('the_content', get_the_content);?

Tim MB Tim MB
1 sept. 2017 14:00:22
0

Am găsit soluția:

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

A doua metodă pentru a obține conținutul postului cu tagul p este

echo wpautop( $post->post_content );
16 oct. 2014 17:04:49
Comentarii

Cum aș adapta asta la acest lucru? <?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 dec. 2021 06:14:46