Wie kann ich ein ']' in einem Funktionscode umgehen?


17

Wie kann ich eine rechte Klammer in einem Funktionscode umgehen?

Ich arbeite an einem Google Map-Plugin, das Punkte codiert hat. Manchmal haben die Polygone das] darin, was WP glauben lässt, dass es das Ende des Shortcodes ist.

Beispielsweise:

[my_shortcode latitude='36.93'  longitude='-72.98' encoded_points='ortlF~g]tM?cZEH`z]}|@DQfi]' ]

Ich habe versucht, ]was kein Problem für WP verursacht, aber es verursacht ein Problem für meinen Google-Kartencode. Ich könnte Regex verwenden, um] zu ersetzen, aber vielleicht gibt es einen einfacheren Weg. Hat der Shortcode ein Escape-Zeichen?

Antworten:


18

Ich kenne keine offizielle Escape-Syntax für Shortcodes und wahrscheinlich gibt es keine.

Wenn WordPress nach Shortcodes sucht, sucht es nach [ und ] . Wenn Sie eckige Klammern innerhalb eines Shortcodes verwenden möchten, werden diese mit den entsprechenden HTML-ASCII-Entitäten ausgeblendet.

Dh Ersetzen [ durch [und ] durch ]. Wordpress erkennt ]das Ende des Shortcodes nicht.

Ob dies Ihrem Zweck dient, hängt natürlich davon ab, ob es vor der Übergabe an die Google Maps-API in ] konvertiert wird oder ob die API es erwartungsgemäß verarbeitet. Ich habe keine Erfahrung damit, kann also nicht sagen.


Vielen Dank für Ihre Antwort. In meiner Frage habe ich vergessen, "& # 93;" in einem Codeblock kam es also als ']' heraus. Ich habe meine Frage bearbeitet. Die HTML-Entität funktioniert für WP, jedoch nicht für Google Maps. Ich muss Regex verwenden, um die HTML-Entitäten zu ersetzen. Vielen Dank für die Hilfe.
Laxmidi

@Laxmidi Meine oben genannte "Vermutung", dass es kein Fluchtzeichen gibt, grenzt mit Sicherheit an - wollte nur vorsichtig sein, um keine Fehlinformationen zu liefern. Wenn ja, würde der Codex-Artikel auf der Shortcode-API dies erwähnen. Ich denke, später zu ersetzen, ist Ihre beste Wette. Benötigen Sie einen regulären Ausdruck für einen Charakter? Ich denke, str_replace()sollte die Arbeit auch erledigen. Wäre dann weniger ressourcenintensiv.
Johannes Pille

1
@JohannesPille Hallo, es ist ein Oldie, aber ich muss das [] auch durch & # 93; ersetzen lassen. Erstmaliges Speichern in WP und es funktioniert, aber beim Bearbeiten des Beitrags / der Seite wird WP & # 93; in]. (brauche das für ein google event tracking auf shortcode buttons) regards
alex

Wie @alex sagte, wenn Sie zur visuellen Registerkarte wechseln und zur Code-Registerkarte zurückkehren, werden die Sonderzeichen von tinyMCE wieder auf [] geändert, und der Code wird unterbrochen.
Saulo Padilha


2

Basierend auf der Antwort von Johannes Pille gibt es die Funktion wp, um eckige Klammern für die Verwendung von Text in Shortcode-Parametern zu umgehen:

function my_esc_brackets($text = ''){
    return str_replace( [ "[" , "]" ] , [ "[" , "]" ] , $text );
}

Oft schlagen die Leute vor, den $ -Inhalt des Shortcodes für Textparameter zu verwenden, aber es gibt Fälle, in denen der Shortcode viele solcher Textparameter enthält.


2

Hier scheint es eine offizielle Seite zu geben: Escaping Shortcodes

Extrakt :

Um dies zu tun, müssen Sie den Shortcode umgehen, indem Sie zwei Sätze von Klammern anstelle von nur einer verwenden. So zeigen Sie dies in Ihrem Beitrag an:

[Galerie]

Du würdest folgendes schreiben:

[[Galerie]]


0

Auch wenn Sie NICHT mit url spielen, verwenden Sie urldecode (Ihr attribute_value), wobei% 5B und% 5D als Ersatz für [und] in Ihrem attribute_value verwendet werden.

Ihr Code könnte dann so aussehen:

In Ihrer WP-Seite: [my_shortcode myattr="%5Bmyattribute_value%5D"]

Führen Sie dann in Ihrer Shortcode-Funktion Folgendes aus:

 $origvalue=urldecode($atts['myattr']);

Dadurch werden die Zeichen [und] im $ origvalue wiederhergestellt, sodass $ origvalue jetzt Folgendes enthält: [myattribute_value]

TIPP: Wenn Sie mit der URL spielen, machen Sie dasselbe, aber fügen Sie dem Funktionscode Folgendes hinzu:

$urlvalue = urlencode($origvalue);

Wenn das nicht klar ist: JA, ich mache urlencode (urldecode (ein Wert von $ atts)), um einen korrekten Teil einer URL zu erstellen.

Ganz einfach, hoffe das hilft.

Pierre


-1

Dies ist eine alte Frage, aber hier ist eine Problemumgehung mit CSS. Schließen Sie anstelle von geschweiften Klammern die Zeichen wie folgt in einen Bereich ein:

<span class="bracket">some string</span>

Fügen Sie dann Folgendes zum Stylesheet des Themas hinzu:

span.bracket:before {
  content: '['
}
.colored-blocks span.bracket:after {
  content: ']'
}

Das Ergebnis sieht dann so aus:

[some string]


3
Bei der Frage geht es um das Einfügen ]als Teil des Inhalts, nicht darum, wie er angezeigt wird.
Mark Kaplun
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.