Wie bekomme ich 'post_content' ohne <p> Tags zu entfernen?

20

Ich versuche, den Inhalt eines bestimmten Beitrags abzurufen:

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

Dadurch wird jedoch der Inhalt ohne Zeilenumbrüche abgerufen und alle <p>Tags werden weggelassen.

Wie kann man den Inhalt eines Beitrags richtig abrufen, ohne die <p>Tags zu entfernen (wie auf der Beitragsseite oder auf der Registerkarte " Text " des Beitragseditors angegeben )?

Lisandro Vaccaro
quelle

Antworten:

30

Beide Antworten sind bis jetzt richtig, aber eine gründlichere Antwort scheint gerechtfertigt.

Wenn Sie dies verwenden:

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

Sie wenden die einzige Funktion an, mit der Absatz-Tags zum Inhalt von Posts hinzugefügt werden. wpautop()ist eine von vielen Funktionen (einschließlich gelegentlicher Plug-in-Funktionen), mit denen the_contentSie sich verbinden können. Wenn Sie dies also tun:

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

Sie erhalten den Post-Inhalt durch alle Filter, the_contentdie wpautop()standardmäßig enthalten.

Schließlich können Sie, wenn Sie auf dem Laufenden sind, Folgendes tun:

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

Das ist im Wesentlichen ein Wrapper für das zweite Code-Snippet, aber natürlich sieht es ein bisschen besser aus. Update 1. September 2018: Überarbeitet aufgrund eines Kommentars . Requisiten @timmb.

Im Allgemeinen würde ich sagen, dass der bevorzugte "richtige Weg" dies von zuletzt zu zuerst ist, da die Verwendung einer WP-Kernfunktion (zumindest theoretisch) mehr Abwärtskompatibilität ermöglichen sollte. Die einzige andere Entscheidung, die Sie dann treffen müssen, ist, ob Sie WordPress und Plugins erlauben möchten, auch den Inhalt der Posts zu ändern. Verwenden Sie in diesem Fall unbedingt die 2. oder 3. Option.

mrwweb
quelle
1
Ich denke, diese endgültige Lösung ist falsch. Aus codex.wordpress.org/Function_Reference/get_the_content : "Ein wichtiger Unterschied zu the_content () besteht darin, dass get_the_content () den Inhalt nicht durch den Filter 'the_content' leitet." Wäre dies nicht der richtige Ansatz $content = apply_filters('the_content', get_the_content);?
Tim MB
7

Die Lösung gefunden:

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

Die zweite Methode zum Abrufen von Post-Inhalten mit dem p-Tag ist

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