WordPress 2.5 Shortcode API

Die Zeiten ändern sich.

Dieser Beitrag scheint älter als 15 Jahre zu sein – eine lange Zeit im Internet. Der Inhalt ist vielleicht veraltet.

WordPress 2.5 hat die Tagging-Funktionen ausgebaut und viele kleine Details spendiert. Dabei ist unter anderem die Shortcode API abgefallen, mit der man schnell und einfach Strings im Content mit entsprechendem Inhalt füllen kann. Damit wird das Ansprechen derartiger Möglichkeiten aus anderen Funktionen, sei es in einem Plugin oder einer Theme-Funktion einfacher.

Die Möglichkeiten von Shortcodes sind vielfältig, viele andere Applikationen lieben diese Funktion und mit der neuen Funktionalität kann man dem Kunden das Schreiben im Backend damit recht gut erleichtern. Um die Shortcodes noch in das Quicktag-Menu zu bekommen, empfiehlt sich die Verwendung des Plugin AddQuicktag.

Die Übergabe ist einfach und schnell verstanden. Eine kleine Einführung und ersichtliche Erfolge gibt es in Kurzversion in den folgenden Zeilen. Wie es genau geht und ein Plugin mit verschiedenen Beispielen gibt es bei Ozh, der derzeit auch die neue WordPress Funktion durchleuchtet.

Die Möglichkeiten


[shortcode ]
[shortcode /]
[shortcode foo="bar" /]
[shortcode foo="bar" baz="bing" /]
[shortcode ]content[shortcode /]
[shortcode foo="bar"]content[/shortcode]

Erläuterungen

In kurzen Zügen und als kleine Übersicht hier nun die Funktionsweise, verantwortlich ist die Funktion add_shortcode(). Näheres findet man in /wp-includes/shortcodes.php, inklusive einer „kleinen“ Dokumentation.

Das folgende Beispiel, in einem Plugin oder Theme hinterlegt, sorgt dafür, dass wenn der Syntax [tag1] im Content vergeben wird, dann erscheint im Frontend, auf das Blog also, der Text Some Longer Text.


// [tag1] --> Some Longer Text
function shortcode_example() {

	return 'Some Longer Text';
}

add_shortcode('tag1', 'shortcode_example');

Im Screenshot sollte das ganze dann deutlicher werden.
WP 2.5 Shortcode

Von Frank Bültge

bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.

17 Kommentare

  1. Mal wieder ne blöde Frage, ich weiß – aber was passiert eigentlich, wenn man das Plugin mit den ShortCodes dann wieder deaktiviert – also mit dem, der den SC umwandelt?

    Steht der dann so im Text?

    Tja – ich bleib erstmal bei der verwendung von für den Zweck sinnvollen bestehenden Tags mit rel oder class Attribut… is zwar auch nicht das gelbe vom Ei, aber wenn das Plugin mal ausfallen sollte muss man wenigstens nicht zig Posts nachbearbeiten…

    Bestes Beispiel währe eine Codeansicht [code]Code[/code] mag funktionieren…


    <pre class="syntax">
    Code
    </pre>

    oder

    <code lang="php">
    Code
    </code lang="php">

    erscheint mir aber sinnvoller, wenn man nicht genau weiß, dass der Entwickler dieses Tool an jede kommende WP Version, welche man benutzen möchte, anpassen wird.

  2. Ist die Funktion deaktiviert, dann steht einfach nur der Tag da, ohne eine Bedeutung für den Leser.
    Die Funktion muss dann immer verfügbar sein, aber so ist es ja auch bei anderen Tools, die diese Form nutzen, bsp. Textile.

  3. hmm so betrachtet auch wahr – und eigentlich ists ja auch dumm, ein Plugin nicht mehr einzusetzen, welches man mal verwendet hat und dann keine Alternative einzubauen… muss man sich halt nochmal um die alten Posts kümmern.

    Dies API Funktion bietet dem Entwickler jedenfalls eine wesentlich angenehmere Verarbeitung, als wenn er erst jedes Hook von wordpress, welches zum Content anzeigen verwendet wird nutzen muss und dort dann entsprechendes per RegExp rausfiltern müsste.

    Insofern werd ichs halt auch für mein Flickr Plugin nutzen… da will ich eh nicht, dass es jemand wieder deinstalliert 😉

  4. Hm hat es einen Grund das du die Funktion „deaktiviert“ ausgibst?
    das „shortcode_example1“ hat mich einige Sekunden lang verwirrt 😉

    Aber eine wirklich schöne Sache.
    Danke dir für das kleine Tutorial, von alleine hät ich die Funktion niemals gefunden.

  5. So, nachdem auf der wp-hackers Mailingliste das Thema der deaktiverten Shortcodes auch aufgeflammt ist, hab ich mal ein Plugin diesbezüglich geschrieben. Bin gespannt, ob und wann von dort oder von wp-testers Feedback Feedback kommt. Wenn lang genug nix kommt bzw. positive Rückmeldungen kommen werd ich das mal rausbringen, dann hat sich diese Sorge auch erledigt, weil man dem dann ganz schnell abhilfe schaffen kann…

  6. kann man die shorttags eigentlich verschachteln?

    bzw. lässt sich die abarbeitungsreihenfolge irgendwie beeinflussen?

  7. kann man die shorttags eigentlich verschachteln?

    Ja kann man unter bestimmten Umständen, dafür muss die Funktion, welche den äußeren Shortcode verarbeitet aber do_shortcode aufrufen. Siehe WordPress Codex

    lässt sich die abarbeitungsreihenfolge irgendwie beeinflussen?

    Nein. Der äußere Shortcode wird zuerst ausgeführt.

  8. Verschachteln ist meiner Ansicht nach möglich, habe aber keine Tests gemacht. Würde mal auf die Doku in der Datei verweisen und die Gallerie-Funktion in WP 2.5. WP 2.5.1 wird die Shortcodes zur Gallerie-Funktion nochmal anfassen, eventuell wird es dann sauberer.

  9. Noch eine kurze Anmerkung zum Verschachteln:
    wie gesagt muss die entsprechende Funktion des Plugins die Verschachtelung unterstützen und zweitens kann man nicht den gleichen Shortcode verschachteln, sofern der eingeschlossene ein schließendes Tag (und damit Inhalt) besitzt.

    [sca]foo[sca]bar[/sca]baz[/sca]

    würde darin enden, dass nur

    [sca]foo[sca]bar[/sca]

    geparsed wird, während

    bar[/sca]

    ignoriert würde.
    möglich ist jedoch

    [sca]foo[scb]bar[/scb]baz[/sca]

    sofern die Funktion die „sca“ verarbeitet ihren Inhalt nochmal durch do_shortcode() verarbeiten lässt. Tut sie das nicht (was wahrscheinlicher ist, sofern es sich um ein Plugin handelt) klappt es nicht.

  10. wenn der äussere shortcode zuerst ausgeführt wird, sollte es ja eigentlich funktionieren.

    dann kann man mit einem shortcode-block einen inneren shortcode des contents dublizieren und mit entsprechenden argumenten füllen.

    spannende sache und sehr hilfreich. das beste für mich an wp 2.5. wenn auch bisher mit recht einfachen shortcodes.

  11. interessant zu testen wäre auch, was passiert, wenn man über einen shortcode überhaupt erst shortcodes erzeugt … muss mich wohl mal ans testen machen.

    hut ab übrigens an diesen blog. es ist der einzige mir bekannte, der auf hohem niveau wp-relevante entwicklungsthemen erörtert.

  12. statt sinnlos zu testen einfach mal in die wp-includes/shortcodes.php reinschauen und verstehen, was passiert…

    Das funktioniert folgendermaßen:
    Alle existierenden Shortcodes werden in eine Regexp geschrieben so ala
    (shortcode1|shortcode2|shorcode3) nur n bissel komplexer.
    Dann wird der Shortcode durch das ersetzt, das die Shortcodefunktion als Rückgabewert hat.

    Da nur der ursprüngliche Sting und und nicht das Ergebnis einer Umwandlung per Regexp bearbeitet wird, MUSS die Funktion des äußerden Strings do_shortcode erneut aufrufen – sonst kann das nicht funktionieren. Wenn die innere zuerste ausgeführt würde, würde es das allerdings. Aber das ist nicht so einfach und performant umsetzbar wie es so der Fall ist.

    Neue shortcodes hinzu zu fügen funktioniert dementsprechend auch nur, wenn du do_shortcode danach ausführst. Danach kannst du dann aber deine hinzugefügten shortcodes wieder entfernen, bevor du das Ergebnis wieder zurückgibst.

Kommentare sind geschlossen.