Seit Version 2.5 wird WordPress mit der Shortcode-API ausgeliefert, näheres dazu hatte ich im Artikel „WordPress 2.5 Shortcode API“ erläutert. Nun hatten ich ihm Rahmen mit einem lieben Leser eine Anforderung, die sicher nicht selten vorkommt und die man mit Hilfe dieser Shortcode-API und den benutzerdefinierten Feldern sehr schön lösen kann.
Pro Artikel hinterlegt der Autor drei benutzerdefinierte Felder, in einem weiteren Artikel schon mal näher erläutert: bild, link, linktext. Im Text kann er den Shortcode [werbung] setzen. Diesen erkennt WordPress und mit Hilfe der folgenden Funktion werden die entsprechenden Daten geladen und die Werbung wir dann an dieser Stelle eingebunden.

Die folgende Funktion kann als Plugin oder in der functions.php des Themes abgelegt werden.
function example_link() {
global $wp_query;
$postID = $wp_query->post->ID;
$mylink = get_post_custom_values('link', $postID);
$mypic = get_post_custom_values('bild', $postID);
$mylinktext = get_post_custom_values('linktext', $postID);
return '<a href="' . $mylink[0] . '"><img title="' . $mylinktext[0] . '" src="' . $mypic[0] . '" alt="" /></a>';
}
add_shortcode('werbung', 'example_link');
Im Text erscheint nun auf recht einfache Weise das Bild mit Link und Linktext. Die Lösung zeigt nur einen Lösungsweg und kann sicher in der einen oder anderem Form Anwendung finden. Trotzdem sollte man überlegen, wie man die Shortcodes nutzen will und die Funktion darauf hin anpassen. Ähnlich könnte auch die Daten für Link, Bild, und Linktext aus anderen Datenfeldern kommen, die Shortcode-API erleichtert es aber, dass Autoren derartige Inhalte in den Artikel einbinden können.
Sehr schönes Beispiel für die Shortcodes bzw Custom Keys. Werde etwas ähnliches demnächst für einen Kunden brauchen, bzw in deren Internet Auftritt massiv auf Shortcodes setzen müssen da viele Dinge einfach zu komplex sind um es einem Laien verständlich zu machen.
Sehr schön mal solch ein Beispiel zu haben! Das wird mir sicher noch nützen!
Danke für das Beispiel, werde ich mir mal bei Zeiten zu Gemüte führen und genauer anschauen um es dann auch selber zu nutzen. Hab mich bisher immer vor dem Einsatz von Shortcodes gedrückt, da ich keine Lust dazu hatte mich damit zu befassen. Aber mit so einem guten Beispiel, sollte selbst mir das gelingen.
Eine einfache und elegante Lösung, wie ich finde. Danke für den Tip. Lässt sich bestimmt irgendwann mal verwenden.
Und noch schöner wäre es, wenn man shortcodes in meta_value-Feldern nutzen könnte.
Leider setzt WP sie dort aber nicht um: [text] bleibt bei der Ausgabe: [text].
Würde gerne den Autoren eines Blogs verschiedene Adressen-Snippets anbieten [adr01] etc., die sie dann nicht immer vollständig in die value-Felder tippen müßten.
Gibt es da vielleicht eine Lösung?
@Adrian: doch, man sollte die Inhalte von benutz. Feldern in Shortcodes nutzen können, eventuell ist das Plugin ein Tipp
Danke, das ist ein Tipp. Leider nicht der Richtige. Dann habe ich mich unverständlich ausgedrückt: Ich möchte nicht meta_values in shortcodes nutzen, sondern umgekehrt
Beispiel: Nach dem eigentlichen Artikel (Veranstaltung) kann der Autor Angaben machen, die dann in eine Tabelle fließen. Die optionalen Felder habe ich mit Custom Fields für ihn bereits angelegt (dank Flutter-Plugin sehr einfach). Nun finden die Veranstaltungen an verschieden Adressen statt, die er mit shortcodes eingeben können soll.
Statt "UncooleEckkneipe, Vermüllte Straße 123, 12345 Hippesheim" sollte er nur [adr5] eingeben müssen. Die shortcodes liegen bereits vor, da es nur 10 Orte sein können.
Nochmal, du willst also Shortcodes in den benutz. Feldern verwenden?
mach die Ausgabe einfach mit
Ja. ("Und noch schöner wäre es, wenn man shortcodes in meta_value-Feldern nutzen könnte.")
Meinst du dass du den Inhalt direkt angezeigt bekommen willst?
Ich versteh nicht so ganz worauf du willst...
NACH Eingabe von Titel und Content des Events kann der Autor über diverse custom fields Daten eingeben (Startdatum, Seminarleiter, Kosten, Ort etc.), die eine Tabelle füllen, die per Template an den Artikel angefügt wird.
Er sieht links z.B. "Ort" (meta_key) und rechts ein Textinputfeld (meta_value), in das er die Adresse eingibt.
Adressen soll er als shortcode in das Textinputfeld eingeben können (er weiß z.B., dass Adresse xy den shortcode [adr_xy] hat).
Das aber funktioniert bisher nicht. Nach Veröffentlichung steht an Stelle der Adresse nur der shortcode "[adr_xy]" in der Tabellenzelle. Ich weiß nicht, wie ich mich noch anders ausdrücken soll...
Was aber bedeutet, dass er die Shortcodes kennen muss. Ich vermute, dass du mit einem Plugin besser bedient wärest, zumindest was den Aspekt Nutzbarkeit und Usability betrifft. Metaboxen lassen sich recht einfach integrieren und dort könnte man diverse Inhalte anbieten, so dass man als User wirklich nur auswählen muss.
Aber, ich habe nun verstanden, Shortcodes als Wert für benutzdef. Felder.
Danke für eure Antworten. Wenn es die shortcode-API nicht zuläßt (was noch immer ungeklärt ist), werde ich deine Anregung bzgl. Metaboxen aufgreifen. Ist mir noch neu, schau ich mir an.
Bin soeben auf das Plugin "Pods" gestoßen, dass ein weites Feld für die CMS-Nutzung von WP öffnet (und weitaus solider und variabler ist als die Nuzung von custom fields inkl. Flutter). Das könnte auch eine gute Lösung sein.
Schade.. hab alles wie beschrieben eingegeben.. Funktioniert leider igendwie dich nicht..
Aber genau das was ich gesucht habe.. Was tun..?
WP Version 3.02 ganz frisch..
sorry, mein Fehler.. funktioniert einwandfrei... Danke..
Super Idee mit den Shortcodes, danke dafür! Ich habe bisher für Werbung immer ein spezielles Plugin eingesetzt, den Advertising Manager.
Hallo, eine tolle Idee was mit Shortcodes so alles machbar ist. Ich bin gerade am aufbauen unserer Famiulien Seite und habe versucht das umzusetzen. Leider ohne erfolg. Ein einfaches Drag & Drop des obigen Codes brachte kein Ergebnis/Ausgabe des Feldes.
Was mache ich falsch? Um das ganze für mich einfacher zu gestalten (langsames rantasten), habe ich folgenden Code in die functions.php aufgenommen (alle anderen Shortcodes funktionieren dort drin) und das Bentzerdefinierte Feld fldOrt angelegt und mit dem Text Toilettenschüssel belegt.
function stellplatz( $atts, $content = null ) { $fldOrt= get_post_meta($post->ID, 'fldOrt', true); return '' . $fldOrt . $content . ''; } add_shortcode( 'stellplatz', 'stellplatz' );Nach eingabe in meinem Content von [stellplatz] upssalat [/stellplatz] hätte ich jetzt Toilettenschüssel upssalat erwartet. statt dessen kam nur upssalat.
Hat jemand noch einen Tipp für mich in welche Richtung ich laufen muß?
Danke schon mal vorab (übrigens, habe den letzten stand von WordPress installiert.
viele Grüße
Achim
@Achim: du vermischt hier einige Sachen; folgendes sollte klappen und den Shortcode mit dem Wert deines Custom Fields ersetzen