WordPress shortcodes – enkelt exempel

I WordPress 2.5 introducerades shortcodes men det är nog många som fortfarande inte vet riktigt vad det är och vad man kan använda det till.
Shortcodes tillåter dig exempelvis att skriva [gallery] direkt i ett blogginlägg, och så visas alla bilder som hör till det inlägget som en liten kontaktkarta.
Man kan givetvis definiera egna shortcodes, genom att skriva en funktion i ett plugin eller i functions.php och sen koppla en shortcode till den funktionen.

Exempel 1

function bloginfo_shortcode( $atts ) {
    extract(shortcode_atts(array(
        'key' => '',
    ), $atts));
    return get_bloginfo($key);
}
add_shortcode('bloginfo', 'bloginfo_shortcode');

Funktionen add_shortcode registrerar en ny shortcode, och i exemplet ovan betyder det att om man skriver [bloginfo] i ett inlägg, så kommer funktionen bloginfo_shortcode() att anropas. Just i det här exemplet ska man dessutom skicka med en parameter, det ser ut så här: [bloginfo key=”template_url”]
(Exemplet kommer från Blue Anvil)

Exempel 2

Jag har i ett tidigare inlägg visat hur man kan koppla en spotifylista till en wordpress-post, en metod som jag använder på http://topp30.se.
Jag vill utnyttja det faktum att listorna nu ligger som egna fält, och skapa en sida med alla spotifylistor i en lång (nåja) HTML-lista.
Steg ett är att definiera en funktion som hämtar alla inlägg med ”spotify-fält” och sen generera en lista av dem.
Nästa steg är att koppla en shortcode till den funktionen.

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// [spotifylist] - shortcode function
function spotify_sc_func($atts) {
   ob_start();
?>
   <ul id="spotifylist">
   <?php
   global $wpdb, $post;
   $querystr = "
    SELECT wposts.* 
    FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta
    WHERE wposts.ID = wpostmeta.post_id 
    AND wpostmeta.meta_key = 'spotify' 
    AND wposts.post_status = 'publish' 
    AND wposts.post_date < NOW() 
    ORDER BY wposts.post_type, wposts.post_date DESC
    ";
 
   $pageposts = $wpdb->get_results($querystr, OBJECT);
?>
   <?php if ($pageposts): ?>
      <?php foreach ($pageposts as $post): ?>
         <?php setup_postdata($post); ?>
	 <?php $spotify = get_post_custom_values("spotify"); ?>
         <li><?php echo the_title(); ?>: <a href='<?php echo $spotify[0]; ?>'>spotify</a> | <a href="<?php the_permalink(); ?>">text</a></li>
      <?php endforeach; ?>
 
   <?php else : ?>
      <h2 class="center">Not Found</h2>
      <p class="center">Sorry, but you are looking for something that isn't here.</p>
   <?php endif; ?>
 
 
   </ul>
   <?php
   $output = ob_get_contents();
   ob_end_clean();
   return $output;
}
 
add_shortcode('spotifylist', 'spotify_sc_func');

Nu återstår bara att skapa en sida som använder vår nya shortcode.

Och resultatet ser blir det här

Läs också Mastering WordPress Shortcodes på Smashing Magazine.