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?

Laxmidi
quelle

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.

Johannes Pille
quelle
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
tinyMCE ist Javascript und steckbar. Werfen Sie einen Blick auf wpse / questions / 223677 / das Hinzufügen von benutzerdefinierten Textmustern im visuellen Editor von wp-4-5 . @alex
Johannes Pille
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.

DocSS
quelle
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]]

Guillaume Husta
quelle
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

Pierre13fr
quelle
-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]

Yitwail
quelle
3
Bei der Frage geht es um das Einfügen ]als Teil des Inhalts, nicht darum, wie er angezeigt wird.
Mark Kaplun