Comment obtenir 'post_content' sans supprimer les balises <p>?

20

J'essaie de récupérer le contenu d'un message spécifique:

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

Cependant, cela récupère le contenu sans saut de ligne et omet toutes les <p>balises.

Quelle est la bonne façon de récupérer le contenu de la publication sans supprimer les <p>balises (comme cela est indiqué sur la page de la publication ou l' onglet " Texte " de l' éditeur de publication )?

Lisandro Vaccaro
la source

Réponses:

30

Jusqu'à présent, les deux réponses sont correctes, mais une réponse plus approfondie semble justifiée.

Si vous utilisez ceci:

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

vous appliquez la seule fonction qui ajoute des balises de paragraphe pour publier du contenu. wpautop()est l'une des nombreuses fonctions (y compris les fonctions de plugin parfois) qui s'y accrochent the_content, donc si vous faites cela:

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

vous obtenez le contenu du post exécuté à travers tous les filtres sur the_contentlesquels inclut wpautop()par défaut.

Enfin, si vous êtes dans la boucle, vous pouvez simplement faire ceci:

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

qui est essentiellement un wrapper pour le deuxième extrait de code, mais bien sûr, c'est un peu plus joli. Mise à jour 1 septembre 2018: révisée en fonction des commentaires . Accessoires @timmb.

En règle générale, je dirais que la «bonne façon» préférée de procéder est de la dernière à la première, car l'utilisation d'une fonction WP de base devrait permettre une compatibilité ascendante plus (théoriquement, au moins). La seule autre décision à prendre est alors de savoir si vous souhaitez autoriser WordPress et les plugins à modifier également le contenu de la publication. Si tel est le cas, utilisez définitivement les 2e ou 3e options.

mrwweb
la source
1
Je pense que cette solution finale est incorrecte. De codex.wordpress.org/Function_Reference/get_the_content : "Une différence importante par rapport à the_content () est que get_the_content () ne transmet pas le contenu via le filtre" the_content "." Cela ne suggérerait-il pas la bonne approche $content = apply_filters('the_content', get_the_content);?
Tim MB du
7

Trouvé la solution:

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

La deuxième méthode pour obtenir le contenu de la publication avec la balise p est

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