Sidebar
ein-/ausblenden

WordPress 2.5 Shortcode API

Plugin für WordPress SEO

Anzeige

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

16 Kommentare und 2 Trackbacks zu „WordPress 2.5 Shortcode API“

  1. 1
    Kommentar von Xel

    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. 2
    Kommentar von Frank Bültge

    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. 3
    Kommentar von Xel

    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. 4
    Pingback von links for 2008-03-31@kobak pont org
  5. 5
    Kommentar von Jared

    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.

  6. 6
    Kommentar von Frank Bültge

    nein, lediglich der Fehlerteufel. Danke!

  7. 7
    Kommentar von Xel

    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...

  8. 8
    Kommentar von cg

    kann man die shorttags eigentlich verschachteln?

    bzw. lässt sich die abarbeitungsreihenfolge irgendwie beeinflussen?

  9. 9
    Kommentar von Xel

    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.

  10. 10
    Kommentar von Frank Bültge

    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.

  11. 11
    Kommentar von Xel

    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.

  12. 12
    Kommentar von cg

    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.

  13. 13
    Kommentar von cg

    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.

  14. 14
    Kommentar von Frank Bültge

    @cg: Vielen Dank, freut mich!
    Da immer alle auf WP "rumhacken", beschränke ich mich auf diese Themen.

  15. 15
    Kommentar von Xel

    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.

  16. 16
    Pingback von Bildertemplate für WordPress mit image.php » CoreBlog
  17. 17
    Kommentar von Marc

    Ich habe eine Frage bzw. ein kleines Problem mit den shortcodes... Ich versuche momentan mein eigenes, minimalistisches Adsense-Plugin zu schreiben, da das Plugin, dass ich bisher verwende buggy und vollkommen überdimensioniert ist.
    Folgendes Problem:

    Ich will mit shortcodes die Syntaxe [ad] [ad#test] und [ad#test2] abfangen.
    Wenn ich nun die Reihenfolge

    add_shortcode('ad', 'funktion1');
    add_shortcode('ad#test', 'funktion2');
    add_shortcode('ad#test2', 'funktion3');

    in meiner Plugin-Datei habe, wird bei [ad#test] oder [ad#test2] immer der erste shortcode, "[ad]", angezogen.
    Ich muss diesen ganz nach hinten setzen, damit [ad#test] greift! Sprich:

    add_shortcode('ad#test', 'funktion2');
    add_shortcode('ad#test2', 'funktion3');
    add_shortcode('ad', 'funktion1');

    Ist das normal und richtig, sprich die shortcode-Funktion sucht nicht nach dem vollständigen syntax?
    (Weil "ad#test" auch in "ad" vorkommt?)

  18. 18
    Kommentar von Frank Bültge

    @Marc: schau mal, dort ist auch nochmal ein Beispiel; ich pers. habe den Code gerade nicht vor Augen oder die Zeit. Ich hoffe, dass hilft?

Kommentar schreiben

Kommentarregeln: Bleib cool, kritisch ist in Ordnung, aber wenn du unhöflich bist, dann lösche ich deinen Kommentar. Bitte benutze deinen persönlichen Namen oder Initialen und nicht den Namen eines Unternehmens, dies würde als Spam gewertet und wird gelöscht. Der Zusammenhang zwischen Namen und URL sollte nicht offensichtlich auf Spam hindeuten! ♥ Ansonsten, vielen Dank für den Kommentar und viel Spaß mit meinem Blog.

E-Mail-Benachrichtigung bei weiteren Kommentaren.
Auch möglich: Abo ohne Kommentar.

Kommentar-Hilfe

händischer Spam:
Beachte die Kommentarregeln, jede Form von versuchtem Spam wird gelöscht. Warum und wieso steht in einem meiner Beiträge.

Bezug auf Textstellen:
Du kannst direkt bezug auf Textstellen im Beitrag nehmen. Dazu muss lediglich der Bereich im Artikel markiert werden; daraufhin erscheint ein Button, der den markierten Text in das Kommentarfeld übernimmt und als Zitat auszeichnet. Die Funktion ist nur bei aktivem JavaScript nutzbar.

xHTML:
Du kannst folgende Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <blockquote cite=""> <code> <pre> <em> <strong> <strike> <ul> <ul> <li>

Achte darauf, wenn du Code im Kommentar hinterlegen willst, dann muss der Code maskiert sein. Dann wird er nicht interpretiert. Der Code muss mit Hilfe von HTML-Entities dargestellt werden, d.h. dass man z.B. < als &lt; und > als &gt; einfügt.

E-Mail-Benachrichtigung bei neuen Kommentaren ?
Wenn der Haken in der Checkbox gesetzt ist, dann wirst du über neue Kommentare vie E-Mail informiert. Der Versand erfolgt nur, wenn du die URL in der Bestätigungs-E-Mail genutzt hast oder schon Abonnent hier im Blog bist.

Kommentar erscheint nicht:
Alle Kommentare werden manuell geprüft, freigegeben und nach Möglichkeit beantwortet. Bitte um etwas Geduld und Nachsicht.

Identifikationsbilder (Avatare):
Auf Gravatar.com kann man sich mit seiner E-Mail-Adresse registrieren und ein Bild hochladen, dann erscheint dieses Gravatar hier und in vielen weiteren Blogs.

Spamschutz:
Das Kommentarformular ist mit einem Spamschutz ausgerüstet. Solltest du diesen Artikel ohne JavaScript besuchen und kommentieren wollen, so muss du die Frage beantworten und das jeweilige Wort in das Textfeld eingeben.