¿Cómo obtener 'post_content' sin quitar las etiquetas <p>?

20

Estoy tratando de recuperar el contenido de una publicación específica:

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

Sin embargo, esto recupera el contenido sin saltos de línea y omite todas las <p>etiquetas.

¿Cuál es la forma correcta de recuperar el contenido de la publicación sin quitar las <p>etiquetas (como se muestra en la página de publicación o en la pestaña " Texto " del editor de publicaciones )?

Lisandro Vaccaro
fuente

Respuestas:

30

Ambas respuestas hasta ahora son correctas, pero parece justificada una respuesta más exhaustiva.

Si usa esto:

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

está aplicando la única función que agrega etiquetas de párrafo para publicar contenido. wpautop()es una de las muchas funciones (incluidas las funciones de complemento a veces) que se conecta the_content, así que si haces esto:

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

obtienes que el contenido de la publicación se ejecute a través de cualquier filtro the_contentque incluya wpautop()de forma predeterminada.

Finalmente, si estás al tanto, puedes hacer esto:

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

que es esencialmente un contenedor para el segundo fragmento de código, pero, por supuesto, es un poco más bonito. Actualización 1 de septiembre de 2018: revisada en base a comentarios . Atrezzo @timmb.

En general, diría que la "forma correcta" preferida para hacerlo es de último a primero, ya que el uso de una función WP central debería permitir una mayor compatibilidad con versiones anteriores (en teoría, al menos). La única otra decisión que debe tomar es si desea permitir que WordPress y los complementos también modifiquen el contenido de la publicación. Si ese es el caso, definitivamente use las opciones segunda o tercera.

mrwweb
fuente
1
Creo que esta solución final es incorrecta. De codex.wordpress.org/Function_Reference/get_the_content : "Una diferencia importante de the_content () es que get_the_content () no pasa el contenido a través del filtro 'the_content'". ¿No sugiere esto que sería el enfoque correcto $content = apply_filters('the_content', get_the_content);?
Tim MB
7

Encontramos la solución:

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

El segundo método para obtener contenido publicado con etiqueta p es

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