Jak zdobyć „post_content” bez usuwania tagów <p>?

20

Próbuję pobrać treść określonego postu:

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

Spowoduje to jednak pobranie zawartości bez podziału linii i pominięcie wszystkich <p>tagów.

Jaki jest właściwy sposób na odzyskanie treści postu bez usuwania <p>tagów (jak pokazano na stronie postu lub w zakładce „ Tekst ” w edytorze postów )?

Lisandro Vaccaro
źródło

Odpowiedzi:

30

Obie odpowiedzi są jak dotąd poprawne, ale dokładniejsza odpowiedź wydaje się uzasadniona.

Jeśli użyjesz tego:

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

stosujesz jedną funkcję, która dodaje tagi akapitów do treści postu. wpautop()jest jedną z wielu funkcji (w tym czasami funkcji wtyczek), które się zaczepiają the_content, więc jeśli to zrobisz:

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

treść postu jest wyświetlana przez dowolne filtry, w the_contentktórych wpautop()domyślnie są zawarte.

Wreszcie, jeśli jesteś w pętli, możesz po prostu to zrobić:

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

który jest zasadniczo opakowaniem drugiego fragmentu kodu, ale oczywiście jest trochę ładniejszy. Aktualizacja 1 września 2018: zmieniona na podstawie komentarza . Rekwizyty @timmb.

Ogólnie rzecz biorąc, powiedziałbym, że preferowanym „właściwym sposobem” jest to od ostatniego do pierwszego, ponieważ użycie podstawowej funkcji WP powinno umożliwić większą kompatybilność wsteczną (przynajmniej teoretycznie). Jedyną inną decyzją, jaką należy podjąć, jest to, czy chcesz zezwolić WordPressowi i wtyczkom na modyfikowanie treści postu. W takim przypadku zdecydowanie skorzystaj z 2. lub 3. opcji.

mrwweb
źródło
1
Myślę, że to ostateczne rozwiązanie jest nieprawidłowe. From codex.wordpress.org/Function_Reference/get_the_content : „Ważna różnica w stosunku do the_content () polega na tym, że get_the_content () nie przepuszcza treści przez filtr„ the_content ”.” Czy to nie sugeruje, że byłoby właściwe podejście $content = apply_filters('the_content', get_the_content);?
Tim MB
7

Znaleziono rozwiązanie:

$content = apply_filters('the_content', $post->post_content);
Lisandro Vaccaro
źródło
4

Drugą metodą uzyskania treści postu za pomocą znacznika p jest

echo wpautop( $post->post_content );
DINESH BHIMANI
źródło