WordPress Shortcode und Parameter mit “[” und “]”

Mein WordPress-Plugin “JSON Content Importer” holt über einen WordPress Shortcode Daten aus dem Internet, bereitet diese auf und zeigt sie in WordPress an. Soweit so simpel. Die “Daten aus dem Internet” werden dabei so abgerufen, wie das ein Browser auch tut: Eine Internetadresse wird kontaktiert, der adressierte Webserver antwortet und schickt Text über die OSI-Layer http/TCP/IP

Dazu muss man beim Anlegen der WordPress-Seite den WordPress-Shortcode “jsoncontentimporter” verwenden: D.h. in den Text der Seite einfach [jsoncontentimporter url=”Internetadresse” parameter=”Parameterwert”]Templatetext[/jsoncontentimporter] einfügen. WordPress versucht dann die JSON-Daten von der “Internetadresse” zu holen und zusammen mit “Templatetext” etwas lesbares für die Website zu bauen. Zusätzlich kann man mit “parameter” oder anders genannten Schlüsselwörtern Infos übergeben, um die Ausgabe zu beeinflussen.

Falls aber im Wert von “url” oder “parameter” die Zeichen “]” oder “[” enthalten sind, gibt es Probleme: WordPress schneidet den Text rechts von “]” einfach ab: The shortcode parser does not accept square brackets within attributes.

D.h. wenn man url=”http://www.kux.de?a=1&b=2[3]&c=4″ verwendet, kommt in WordPress nur “http://www.kux.de?a=1&b=2[3” an. “&c=4” entfällt.
Die Lösung: Man sollte “]” oder “[” in URLs sowieso “encodieren”, d. h. spezielle Zeichen durch geeignete Zeichen ersetzen. D.h. “[” durch “%5b”. Und “]” durch “%5d” ersetzen. Dasd Ergebnis des URL-Abrufs (z. B. im Browser) sollte sowohl mit, als auch ohne diese Ersetzung gleich sein – aber für WordPress macht es eben einen großen Unterschied.

Wenn im Wert eines “parameter” im Shorthode “]” oder “[” auftreten sollen, funktioniert das encodieren nicht, da bei der URL der aufgerufene Webserver das übernimmt. Beim Parameter wird aber nur ein Textschnipsel an WordPress übergeben.

Gelöst werden könnte das, indem man für das Plugin vereinbart, dass Schlüsselwörter wie “LEFTSQRBRACKET” und RIGHTSQRBRACKET” im Text der WordPressseite statt “]” oder “[” verwendet werden – und das Plugin diese Schlüsselwörter zu “]” oder “[” übersetzt. Das ist leicht machbar -aber mein WordPress-Plugin “JSON Content Importer” wird nach dem Lean-Gedanken entwickelt: Es muss einen Nutzer geben, der dieses Feature braucht – und der dafür einen frei gewählten Betrag spendet.

PS: Die Grundlage für URLS stammen aus dem Drzember 1994 mit dem Dokument RFC1738 “Uniform Resource Locators (URL)”