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

16 oct 2014, 15:17:21
Vistas: 71.9K
Votos: 28

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)?

0
Todas las respuestas a la pregunta 3
1
43

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.

16 oct 2014 18:11:59
Comentarios

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);?

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

Encontré la solución:

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

El segundo método para obtener el contenido del post con etiquetas p es

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

¿Cómo adaptaría esto a lo siguiente? <?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 dic 2021 06:14:46