Como obter 'post_content' sem remover as tags <p>?

20

Estou tentando recuperar o conteúdo da postagem de uma postagem específica:

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

No entanto, isso recupera o conteúdo sem quebras de linha e omite todas as <p>tags.

Qual é a maneira correta de recuperar o conteúdo da postagem sem remover as <p>tags (como é mostrado na página da postagem ou na guia " Texto " do editor de postagem )?

Lisandro Vaccaro
fonte

Respostas:

30

Até agora, ambas as respostas estão corretas, mas uma resposta mais completa parece justificada.

Se você usar isso:

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

você está aplicando a única função que adiciona tags de parágrafo para postar conteúdo. wpautop()é uma das muitas funções (incluindo funções de plug-in às vezes) que se conectam the_content; portanto, se você fizer isso:

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

você está executando o conteúdo da postagem por meio de filtros nos the_contentquais é incluído wpautop()por padrão.

Por fim, se você estiver no circuito, basta fazer o seguinte:

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

que é essencialmente um invólucro para o segundo trecho de código, mas é claro que é um pouco melhor. Atualização 1 de setembro de 2018: revisada com base no comentário . Props @timmb.

Geralmente, eu diria que o "caminho certo" preferido para fazer isso é do último ao primeiro, pois o uso de uma função principal do WP deve permitir maior compatibilidade com versões anteriores (teoricamente, pelo menos). A única outra decisão a ser tomada é se você deseja permitir que o WordPress e os plug-ins também modifiquem o conteúdo da postagem. Se for esse o caso, use definitivamente as 2ª ou 3ª opções.

mrwweb
fonte
1
Eu acho que esta solução final está incorreta. Em codex.wordpress.org/Function_Reference/get_the_content : "Uma diferença importante de the_content () é que get_the_content () não passa o conteúdo pelo filtro 'the_content'." Isso não sugere que a abordagem correta seria $content = apply_filters('the_content', get_the_content);?
Tim MB
7

Encontrou a solução:

$content = apply_filters('the_content', $post->post_content);
Lisandro Vaccaro
fonte
4

O segundo método para obter o conteúdo da postagem com a tag p é

echo wpautop( $post->post_content );
DINESH BHIMANI
fonte