Basic Shortcode – Warum 1. Absatz nicht in p-Tag verpackt, sondern 2. ist

Ich arbeite an einem grundlegenden Plugin, das Shortcodes für Spalten, Schaltflächen, Panels usw. hinzufügt. Nichts Neues hier. Ich habe Wpautop sowieso nicht verändert; Ich habe versucht, es zu entfernen und zu verzögern – keine Veränderung. Was mit allen verwendeten Shortcodes geschieht, ist, dass der erste Absatz nicht in ein ap-Tag eingeschlossen ist (die p-Tags erscheinen tatsächlich direkt nach dem ersten Absatz und leer), aber alle Absätze nach dem ersten innerhalb desselben Shortcodes sind in p-Tags eingeschlossen. Ich muss herausfinden, WARUM der erste Absatz nicht verpackt wird.

function:

function vc_shortcode_panel($atts, $content = null) { extract( shortcode_atts( array( 'type' => '' ), $atts) ); return '
' . do_shortcode( trim($content) ) . '
'; } add_shortcode('panel', 'vc_shortcode_panel');

Kurzcode:

 [panel type=""]paragraph 1 paragraph 2[/panel] 

Die Ausgabe sieht folgendermaßen aus:

 
paragraph 1

paragraph 2

Ich weiß, wenn ich einen Zeilenumbruch zwischen dem [Panel] und dem ersten Absatz hinzufüge, wird es den ersten Absatz dann in ein ap-Tag umbrechen. Aber sollten Shortcodes nicht korrekt formatiert werden können, ohne dass ein Zeilenumbruch erforderlich ist? Was mache ich falsch und kann mir jemand sagen, warum das passiert?

Solutions Collecting From Web of "Basic Shortcode – Warum 1. Absatz nicht in p-Tag verpackt, sondern 2. ist"

Dies ist ein Beispiel für den beabsichtigten Zweck der wpautop() function . Aus dem Codex:

Ändert doppelte Zeilenumbrüche im Text in HTML-Absätze (

).

Beachten Sie, dass das im Codex angegebene Beispiel explizit eine Zeichenfolge verwendet, die genau zu diesem Zweck mit einem Zeilenumbruch beginnt:

 < ?php $some_long_text = // Start Text Some long text that has many lines and paragraphs in it. // end text echo wpautop($some_long_text); ?> 

Das obige führt zu folgendem Markup:

 

Some long text
that has many lines

and paragraphs in it.

Der Grund für diese functionalität ist, dass doppelte Zeilenumbrüche in HTML-Markup als generischer Whitespace interpretiert und als einzelner Zeilenumbruch im DOM dargestellt werden. Um einen doppelten Zeilenumbruch korrekt darzustellen, müssen Sie entweder
Elemente einfügen oder das standardmäßige Absatzelementstyling verwenden, was auch WordPress tut.

Da die erste Zeile Ihres Beispiels keine Zeilenumbrüche enthält, werden keine Absätze oder
Elemente hinzugefügt, da keine Zeilenumbrüche beibehalten werden müssen.

wpautop() zur genauen Implementierung finden Sie in der Quelle der wpautop() -function .