it-swarm.com.de

wpautop (), wenn sich Shortcode-Attribute in neuen Zeilen befinden, unterbricht das Array

Ich habe ein benutzerdefiniertes Shortcode-Tag mit einigen Attributen und möchte seine Attribute in neuen Zeilen anzeigen können, um sie für Inhaltseditoren besser lesbar 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 sehr ausführlich sein können. Leider fügt wpautop() ein böses zusätzliches Markup hinzu, das das $atts-Array wie folgt aufbricht (unter Verwendung von php print_r($atts)):

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 inline versucht:

[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 dieses zusätzliche Markup zu vermeiden, das das $args-Array unterbricht?

die Funktion, mit der ich den Shortcode [component] registriere, extrahiert die folgenden Werte:

function component_func( $atts, $content = null ) {
extract( shortcode_atts( array(
    'attr1' => 'attr1',
    'attr2' => 'attr2',
    'attr3' => 'attr3',
    ), $atts ) );
    // more code
}

Ich benutze dann diese extrahierten Variablen, um ein anderes Array zu füllen

3
Luca

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

Standard Shortcode Format

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

Ich glaube nicht, dass dies ein Ergebnis von wpautop () ist, aber 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 die Paare Shortcode und Name => Wert zu trennen (dh keine Leerzeichen zwischen dem Namen und dem '=', nur ein Leerzeichen zwischen jedem Namen => Wert Paar). In diesem Zusammenhang wird der <br/> auch als Leerzeichen betrachtet.

Ich habe mich nicht mit den speziellen Interna des Parsens von Shortcodes befasst, daher kann ich keinen Vorschlag für einen Hook oder Filter machen, der helfen würde. Vielleicht hat ein anderer Benutzer hier einige Ideen dazu.

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

Eine andere Möglichkeit besteht darin, dem Endbenutzer ein Formular zur Eingabe der Werte bereitzustellen und dann den Shortcode in den Inhalt einzufügen.

Eine Aktualisierung meiner Antwort

Irgendetwas an meiner Antwort nervte mich und ich schaute noch einmal. Und Sie haben Recht, wpautop () wirkt sich auf die Ausgabe der Seite aus. Aber ich denke nicht, dass es die Ursache für Ihre Shortcode-Probleme ist.

1
Steve