¿Cómo obtener 'post_content' sin eliminar las etiquetas <p>?
Estoy intentando recuperar el contenido de un post específico:
$post = get_post(/* id */);
$content = $post->post_content;
Sin embargo, esto recupera el contenido sin saltos de línea y omite todas las etiquetas <p>
.
¿Cuál es la forma correcta de recuperar el contenido del post sin eliminar las etiquetas <p>
(tal como se muestra en la página del post o en la pestaña "Texto" del editor)?

Ambas respuestas hasta ahora son correctas, pero una explicación más detallada parece necesaria.
Si usas esto:
$content = wpautop( $post->post_content );
estás aplicando la función que añade etiquetas de párrafo al contenido del post. wpautop()
es una de muchas funciones (incluyendo a veces funciones de plugins) que se enganchan a the_content
, así que si haces esto:
$content = apply_filters('the_content', $post->post_content);
obtendrás el contenido del post procesado por todos los filtros aplicados a the_content
, lo que incluye wpautop()
por defecto.
Finalmente, si estás dentro del loop, puedes simplemente hacer esto:
$content = apply_filters( 'the_content', get_the_content() );
que esencialmente es un envoltorio para el segundo fragmento de código, aunque por supuesto se ve un poco más limpio. Actualización 1 Sep 2018: Revisado basado en comentario. Créditos a @timmb.
En general, diría que la forma "correcta" preferida de hacer esto es de la última a la primera, ya que usar una función nativa de WP debería permitir mayor compatibilidad hacia atrás (al menos en teoría). La única otra decisión que queda es si quieres permitir que WordPress y los plugins también modifiquen el contenido del post. Si ese es el caso, definitivamente usa la 2da o 3ra opción.

Creo que esta solución final es incorrecta. Según https://codex.wordpress.org/Function_Reference/get_the_content: "Una diferencia importante con the_content() es que get_the_content() no pasa el contenido por el filtro 'the_content'".
¿No sugeriría esto que el enfoque correcto sería $content = apply_filters('the_content', get_the_content);
?
