it-swarm.com.de

Ist shortcode_unautop () kaputt?

shortcode_unautop() in /wp-includes/formatting.php soll Shortcodes in einem Textblock finden und umbrochene Absatz-Tags von ihnen entfernen.

Ich habe Probleme mit Absatz-Tags gehabt, die es durch diesen Prozess geschafft haben.

Hier ist die Ausgabe von var_dump($pee), die ich ganz am Anfang der Funktion platziert habe, d. H. Die Zeichenfolge, bevor sie verarbeitet wurde:

string(353) "<p>[row wrap="true"]</p>
<p>[one_half]</p>
<p>[text_block]Fusce blandit adipiscing libero, nec bibendum diam volutpat tempor.[/text_block]</p>
<p>[/one_half]</p>
<p>[one_half last="true"]</p>
<p>[text_block]Donec fermentum diam leo, ut convallis nisl tristique ut. Ut rhoncus leo vitae tempus pulvinar.[/text_block]</p>
<p>[/one_half]</p>
<p>[/row]</p>
"

Alle werden wie erwartet in Absatz-Tags eingeschlossen.

Ich setze dann var_dump(preg_replace( $pattern, '$1', $pee )); kurz vor das Ende der Funktion, was ergibt:

string(346) "[row wrap="true"]</p>
<p>[one_half]</p>
<p>[text_block]Fusce blandit adipiscing libero, nec bibendum diam volutpat tempor.[/text_block]</p>
<p>[/one_half]</p>
<p>[one_half last="true"]</p>
<p>[text_block]Donec fermentum diam leo, ut convallis nisl tristique ut. Ut rhoncus leo vitae tempus pulvinar.[/text_block]</p>
<p>[/one_half]</p>
<p>[/row]
"

Sie haben lediglich die öffnenden und schließenden Tags anstelle der einzelnen Shortcodes aus dem gesamten Block entfernt. Ich habe den Wert von global $shortcode_tags; überprüft und alle Shortcodes in meinem Beispiel waren darin enthalten.

Ist die Funktion kaputt oder erwarte ich zu viel davon? Ich bin mir ziemlich sicher, dass ich es nicht bin, und es soll alle Absatz-Tags entfernen - aber ich kann nicht anders, als zu denken, dass etwas anderes vor sich geht, wie unerwartete Leerzeichen oder ähnliches.

2
EpF

Es scheint, dass die Funktionkaputt ist. Das Problem ist in trac: https://core.trac.wordpress.org/ticket/14050

Ich benutze dies, um das Problem vorübergehend zu lösen: https://core.trac.wordpress.org/attachment/ticket/14050/plugin.php . Dieser Code schlägt bei einigen der verwendeten Tests immer noch fehl, behebt jedoch das von mir beschriebene Problem vollständig. Daher werde ich ihn verwenden, es sei denn, ich finde etwas Praktisches, das nicht funktioniert.

2
EpF

Ich habe die WordPress-Dokumentation zu dieser Funktion gelesen und das Verhalten, das Sie dort haben, ist das, das erwartet wird.

Diese Funktion reinigt den Shortcode von außen und nicht von innen. Der reguläre Ausdruck überprüft nicht den Inhalt des Shortcodes.

BEARBEITEN:

https://developer.wordpress.org/reference/functions/shortcode_unautop/

Packen Sie Shortcodes, die eigenständig sind, nicht automatisch ein

Stellt sicher, dass Shortcodes nicht umbrochen in <p>...</p> sind.

Dort ist alles gesagt.

1
mathieuhays