wpautop() – wenn sich Shortcode-Attribute in neuen Zeilen befinden – unterbricht das args-Array [closed]

Lesezeit: 4 Minuten

Ich habe ein benutzerdefiniertes Shortcode-Tag mit einigen Attributen und möchte seine Attribute in neuen Zeilen anzeigen können, um es für Inhaltseditoren lesbarer zu machen:

[component
    attr1 ="value1"
    attr2 ="value of the second one"
    attr3 ="another"
    attr4 ="value"
    ...
    attrN ="valueN"]

Der Grund für diese Anforderung ist, dass einige Attribute inhaltlich recht ausführlich sein können. Leider, wpautop() fügt ein böses zusätzliches Markup hinzu, das die args Array wie dieses (unter Verwendung von php print_r($args)):

Array ( [0] => attr1 [1] => ="value1"
/> [3] => attr2 = [4] => "value [5] => of [6] => the [7] => second [8] => one"
/> [10] => "" //...and more like this)

Ich habe es mit den Attributen versucht in der Reihe:

[component attr1 ="value1" attr2 ="value of the second one" ="value"... attrN ="valueN"]

und die Ausgabe ist wie erwartet:

Array ( [attr1] => value1 [attr2] => value of the second one [attr3] => //...and so on)

Gibt es eine Möglichkeit, die Attribute beabsichtigt zu haben und das zusätzliche Markup zu vermeiden, das die $args Anordnung?

  • Wissen Sie, dass dies von wpautop verursacht wird, weil Sie versucht haben, es zu deaktivieren? Ich denke, das klingt eher so, als hätten Sie ein Problem mit shortcode_parse_atts() …

    – CE

    4. Januar 2013 um 14:06 Uhr

  • Nicht sicher, wann wpautop ausgeführt wird, aber vielleicht könnten Sie vorher einen add_filter ausführen, der Zeilenumbrüche bei Funktionscodes entfernt.

    – hansvedo

    5. Januar 2013 um 5:30 Uhr


  • @hansvedo wenn ich mich recht erinnere, wpautop() läuft vor Filtern, ich glaube, ich habe das vor einiger Zeit ohne Erfolg versucht. auch @Calle Weitere Einblicke in diese Frage können hier nachgelesen werden: wordpress.stackexchange.com/questions/71698/… – Ich habe stattdessen ein benutzerdefiniertes Plugin geschrieben, um das zu erreichen, was ich brauchte, aber die Frage selbst ist immer noch irgendwie unbeantwortet. Danke aber beiden für die Vorschläge!

    – Lukas

    7. Januar 2013 um 15:13 Uhr


  • @Luca Ich denke, es wurde nicht beantwortet, weil die meisten Leute keine Zeit damit verbringen wollen, alles einzurichten. Schauen Sie sich die Funktion shortcode_parse_atts an, die ich erwähnt habe. Sie müssen das wahrscheinlich nur kopieren und \s in der Regexp durch ersetzen [\s\n] um sowohl Leerraum als auch neue Zeile einzuschließen. Aber dann müssen Sie auch Ihre eigene Version von do_shortcode_tag und do_shortcode erstellen. Da Sie es bereits eingerichtet haben, können Sie einfach versuchen, den Quellcode vorübergehend zu ändern, um zu sehen, ob es funktioniert.

    – CE

    12. Januar 2013 um 13:45 Uhr


  • Ich schlage vor, die Frage hier zu schließen und behalten die auf wp.se. Dies ist wirklich eine WordPress-Frage, und ich würde sagen, dies erfordert eine Korrektur innerhalb des WP-Kerns oder einen echten Einblick in die WP-Codierung, der sich besser auf der anderen Website befindet.

    – hakre

    8. Februar 2013 um 14:48 Uhr


akzeptierte Antwort – Gutschrift an @Stephen

Ok, ich habe noch nie einen Shortcode gesehen, der auf diese Weise erstellt wurde, also habe ich ein bisschen Code zusammengestellt, um Ihr Szenario zu testen. Und ich erhalte die gleichen Ergebnisse mit Code, der gut mit dem Standard-Shortcode-Format funktioniert.

Standard-Shortcode-Format

[shortcode name1="value1" name2="value2"]

Ich glaube nicht, dass dies ein Ergebnis von wpautop() ist, sondern ein Ergebnis der Art und Weise, wie die Shortcode-Attribute analysiert werden. Schauen Sie sich das obige Beispiel an und Sie werden sehen, dass das einzige Leerzeichen ohne Anführungszeichen verwendet wird, um den Shortcode und die Name=>Wert-Paare zu trennen (dh keine Leerzeichen zwischen dem Namen und dem „=“, nur ein Leerzeichen zwischen jedem Namen=>Wert Paar). In diesem Zusammenhang die
wird auch als Leerzeichen betrachtet.

Ich habe mich nicht mit den speziellen Interna des Shortcode-Parsings beschäftigt, daher kann ich keinen Vorschlag zu einem Hook oder Filter machen, der helfen würde. Vielleicht hat ein anderer User hier eine Idee dazu.

Wenn Sie Ihren Shortcode so formatieren müssen, wie Sie ihn haben, müssen Sie meiner Meinung nach benutzerdefinierten Code schreiben, um das Array zu analysieren, das an Ihre Shortcode-Funktion übergeben wird. Alle Werte sind vorhanden, also sollten Sie sie wieder zusammensetzen können.

Eine andere Option könnte darin bestehen, dem Endbenutzer ein Formular zur Verfügung zu stellen, in das er die Werte eingeben und dann den Shortcode in Ihren Inhalt einfügen kann.

Ein Update zu meiner Antwort

Irgendetwas an meiner Antwort störte mich, also schaute ich noch einmal nach. Und Sie haben Recht, wpautop() wirkt sich auf die Ausgabe der Seite aus. Aber ich glaube nicht, dass es die Ursache Ihrer Shortcode-Probleme ist.

1179640cookie-checkwpautop() – wenn sich Shortcode-Attribute in neuen Zeilen befinden – unterbricht das args-Array [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy