WordPress Shortcodes außerhalb des Content nutzen

Die Zeiten ändern sich.

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

Die Shortcode-API kann viele Möglichkeiten in den Editor holen und trotzdem die Arbeit für die Autoren übersichtlich halten. So ist mittels eines Shortcodes schnell externe Inhalte in den Content geladen. Anwendungsfälle gibt es ausreichend, wie beispielsweise die Idee der Werbung in einem Artikel zeigt.

Ab und an gibt es aber Fälle, da möchte man im Template den Shortcode nutzen oder die Daten nicht im Editor pflegen, sondern via Custom Field oder ähnliches mitgeben. Kennt man oder gibt es dafür eine Funktion im Plugin oder der Erweiterung für WordPress, dann kann man dies aber trotzdem nutzen. Eine Funktion von WordPress für den Zugriff auf Shortcodes hilft.

Der einfachste Fall ist der Zugriff auf einen Shortcode, bspw. myshortcode; erfolgt mittels der Funktion do_shortcode(). Ein Code-beispiel dazu soll es verdeutlichen; abgelegt wird es im Template – bspw. die single.php des Themes.


echo do_shortcode('[myshortcode]');

Wenn man mit Parametern arbeitet; heißt, der Shortcode kann diese Parameter verarbeiten, dann kann man diese einfach mitgeben.


echo do_shortcode('[myshortcode param="blahblahblah"]');

Aufpassen: PHP unterscheidet ‚ und „, daher kann es beim Laien zu Problemen kommen. Zum Beispiel würde der folgenden Aufruf nicht klappen:


echo do_shortcode('[myshortcode param='blahblahblah']');

übersichtlich und funktionierend wäre


echo do_shortcode('[myshortcode param="blahblahblah"]');

Ein weiters Beispiel nutze aus dem benutzerdefinierten Feld example-name den Wert und übergibt dies an den Shortcode example_shortcode für den Parameter product.


<?php
$example_product = get_post_meta( $post->ID, 'example-name', $single = true );
if ($example_product)
	echo do_shortcode('[example_shortcode product="' . $example_product . '"]');
?>

Daraus ergeben sich viele Möglichkeiten, so zum Beispiel auch ein einfacher Zugriff auf die Gallery, die man pro Beitrag pflegt.


echo do_shortcode('[gallery option1="value1"]');

Damit kann man im Template einfach die Gallery laden und ist unabhängig von den Shortcodes im Editor. Nebenbei spart man sich das Parsen des Filters und beim neuen Design, wenn die die Bilder wenig relevant sind, kann man diese einfach weg lassen und muss nicht den Content filtern oder den Editor vieler Beiträge bemühen. Alle weiteren Ideen überlasse ich gern euch.

Performance

Zum Verständnis hilft die obige Anleitung sicher. Dabei sollte man nicht verschweigen, dass damit ein Regex genutzt wird, der die Performance beinflusst und so gilt die Empfehlung, dass statt do_shortcode() besser eine eigener Callback genutzt werden sollte.


call_user_func(
    $GLOBALS['shortcode_tags']['shortcodename'],
    $array_attr,
    'some content', 
    'shortcodename'  
);

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.