Home » WordPress

WordPress Shortcodes: php-Code in Posts ausgeben

23 Februar 2012

Eines mein Lieblingsfeatur in WordPress ist zweifelsohne der Shortcode. Damit kann man selbst programmierte php-funktionen innerhalb eines Artikels nutzen. Bisher konnte ich kein vergleichbares Feature in anderen Shop- oder Contentmanagementsystemen finden und einige Skeptiker werden jetzt sagen “ein Plugin ist sauberer”, aber es gibt einige Ausnahmen wo es nicht so ist. Auch das WordPress Plugin Exec-PHP (dieses erlaubt php-Code direkt in Posts zu schreiben) erfüllt leider nicht meine Ansprüche. ;)

Gerade die Affiliates kennen das Problem, dass man innerhalb von WordPressposts schnell Unordnung hat wenn man regelmäßig Banner, Produktdaten oder Vergleichsrechner einbindet.
Anfangs ist das kein Problem, aber wenn der Content wächst oder sich die Links ändern, wird es schwer zu pflegen.

Die Lösung: Shortcodes

Shortcodes stehen innerhalb von Blogposts direkt im Inhalt, die Anweisungen sind umschlossen von eckigen Klammern und der Inhalt wird direkt als Parameter an die php-function übergeben, welche wiederum einen dynamischen Inhalt (das Ergebnis der function) zurück liefert.

Bei einer meiner Websites schaut dieses zum Beispiel (ungefähr) so [zumvergleich text="Stromanbieter Vergleich" url="http://www.meine-affiliate-site.de/stromanbieter-vergleich/"] oder so [vergleichsrechner anbieter="pkv"] aus.

Im Inhaltsbereich der Seite (im Frontend) wird jedoch ein Link zu einer Landingpage bzw. ein Vergleichsrechner (iFrame) ausgegeben. Der Vorteil liegt auf der Hand:

  • Der Post ist weiterhin angenehm zu bearbeiten (ohne das sich übermäßig viel unleserlicher Quellcode in ihm Befindet)
  • Ich kann in 2 Minuten einen anderen Vergleichsrechner einbinden bzw. die Ausgabe des Links anpassen
  • Ich könnte z.B. auch Produktdaten aus einem Feed oder einer externen Datenbank laden und innerhalb meiner Seite (manipulieren und) ausgeben.
  • A/B Split Testing

und noch einiges mehr…

So erstellt man einen Shortcode:


Die Hauptarbeit geschieht in der functions.php im WordPress Themeverzeichnis ( /wp-content/themes/dein-aktives-theme/functions.php ).
Hier muss man den Shortcode für WordPress definieren, dass macht man einfach indem man folgendes einfügt:

1
add_shortcode("ausgabe", "my_function");

“my_function” ist dabei der Name der Funktion die ausgeführt werden soll, “ausgabe” ist der Shortcode.
Als nächstes definiert man auch in dieser Datei die php-function:

1
2
3
4
function my_function($atts){ 
$output = 'My dynamic Content';
 return $output;
}

Wenn man nun “[ausgabe]” in einen Post bei WordPress schreibt wird “My dynamic Content” im Frontend des Blogs zu sehen sein. Ist schon ganz nett, aber wenn man noch die Parameter ins Spiel bringt kann man das ganze noch auf viel höherem Niveau betreiben :)

Parameter sind variable Werte die man an die Shortcodes übergeben kann, dass heißt schreibt man in das Post [ausgabe text="Zum Vergleich"] steht innerhalb der my_function() die Variable “$atts[text]” zur Verfügung.

Einfaches Beispiel mit Parameter:

1
2
3
4
5
6
add_shortcode("ausgabe", "my_function");
 
function my_function($atts){ 
$output = '<p><a href="http://link..." title="'.$atts[text].'">'.$atts[text].'</a></p>';
return $output;
}

Die beiden genannten Beispiele sind natürlich eher oberflächlich und verdeutlichen nur bedingt den Nutzen. Aber man könnte auch einen (sehr einfach gehaltenes) A/B split testing realisieren, z.B. so:

Im Post “[Link]” einfügen und dann in die functions.php den Shortcode erstellen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# shortcode registrieren
add_shortcode("Link", "dynamic_link");	
 
# function definieren
function dynamic_link(){
 
# Die zwei Landingpages:
$landingpage_A = 'http://www.my-landingpage.com/LP-A';
$landingpage_B = 'http://www.my-landingpage.com/LP-B';
 
# $AorB mit einer zufälligen Zahl (1 oder 0) füllen:
$AorB = rand(0, 1);
 
# Wenn 0 gebe Link zur LandingPage A aus, wenn 1 gebe Link zur LandingPage B aus
switch ($AorB) {
    case '0':
        $output = $landingpage_A;
        break;
    case '1':
        $output = $landingpage_B;
        break;
    }    
 
return $output;        
}


Nun sollte bei 50% der Seitenaufrufe der Link zu LandingPage A und zu 50% der Link zur LandingPage B ausgegeben werden, d.h. der Besucherfluss teilt sich. Mit Google Analytics kann man nun Pageviews und Conversions entsprechend vergleichen und dann dauerhaft die bessere Werbung (oder whatever) einblenden.
Beim Smashingmagazine gibt es noch einige nützliche und weiterführende Beispiele:
Mastering WordPress Shortcodes

Like it? Then share, rate or comment it:

Themenrelevante Artikel:

Hinweis: Die mit * gekennzeichneten Links sind Partnerlinks

2 Comments »

  • Timo Kracke said:

    Hi,

    vielen Dank für den Artikel – durch eine Google-Suche bin ich darauf gestoßen.
    Mein Anwendungsfall ist der

    - Vorhandene PHP-Datei
    - Ich würde diese gerne per Shortcut platzieren

    - kann ich unterhalb der function-Definition einfach den Seiteninhalt setzen?!
    - muss ich da etwas anpassen
    - kann ich alternativ einen “include” auf die PHP-Datei setzen?

    Würde mich über eine kleine Hilfestellung freuen …

    - Timo Kracke

  • Alex (author) said:

    Hallo Timo,

    jo, das wäre an sich kein Problem. Den Path könntest du als Option übergeben oder fest in diese Funktion rein schreiben:

    add_shortcode("ausgabe", "my_function");
     
    function my_function($atts){ 
    include($atts['path']);
    }

Leave your response!

Um Quelltext in Kommentaren lesbar zu posten nutzt bitte <pre lang="php">EUER CODE</pre>

4tfm.de Newsletter abonnieren

Um Quelltext in Kommentaren lesbar zu posten nutzt bitte <pre lang="php">EUER CODE</pre>

4tfm.de Newsletter abonnieren