I had posted a question on Short Codes to the wp-hackers mailing list and got a pointed to an article on the Codex which explained the process of coding up a short code. I expected it to be more involved than it was and I was pleasantly surprised to find it was really straight forward. I have already implemented one short code for the wp-SwimTeam plugin and expect I’ll have half a dozen more done by the end of the week.
What I implemented for Flickr was pretty simple – it allows the insertion of a Flickr slideshow in a post or page using the Flickr UserId value (which is different than the username) and the Set Id. Here is the snippet of code:
/**
* wpst_flickr_slideshow shortcode handler
*
* Build a short code handler to display a Flickr slide show.
*
* [wpst_flickr_slideshow userid="id" slideshowid="id"
* frameborder="pixels" * width="pixels" height="pixels"
* scrolling="yes|no" align="left|center|right" view="yes|y"]
*
* To show this Flickr slide show:
*
* http://www.flickr.com/photos/27604893@N04/sets/72157605764227907/show
*
* Use this shortcode:
*
* [wpst_flickr_slideshow userid="27604893@N04" slideshowid="72157605764227907"]
*
* This is the resulting IFRAME tag which is returned to the caller.
*
* <iframe align=center src=http://www.flickr.com/slideShow/index.gne?
* user_id=27604893@N04&set_id=72157605761943480 frameBorder=0
* width=500 scrolling=no height=500></iframe>
*
* If the 'view="yes"' or 'view="y"' attribute is include, a linl to the
* Flickr slideshow will be placed under the IFRAME.
*
* @param array - shortcode attributes
* @return string - HTML code
*/
function wpst_flickr_slideshow_sc_handler($atts)
{
$c = container() ;
// Parse the shortcode
extract(shortcode_atts(array(
'userid' => '',
'slideshowid' => '',
'frameborder' => 'default 0',
'width' => '500',
'height' => '500',
'scrolling' => 'no',
'align' => 'center',
'view' => 'no',
), $atts)) ;
// If either the userid or slideshowid are missing then
// we have a problem and can't do anything meaningful.
if (empty($userid) || empty($slideshowid))
{
$c->add(html_br(),
html_b("wpst_flickr_slideshow::Invalid Shortcode Syntax"),
html_br(2)) ;
return $c->render() ;
}
$if_src = "http://www.flickr.com/slideShow/index.gne?" .
sprintf("user_id=%s&set_id=%s frameBorder=%s align=%s",
$userid, $slideshowid, $frameborder, $align) ;
$c->add(html_iframe($if_src, $width, $height, $scrolling)) ;
if (($view == 'yes') || ($view == 'y'))
{
$link = "http://www.flickr.com/slideShow/index.gne?" .
sprintf("user_id=%s&set_id=%s", $userid, $slideshowid) ;
$c->add(html_br(2), html_a($link, "View this slideshow on Flickr."), html_br(2)) ;
}
return $c->render() ;
}
The code above makes use of the phpHtmlLib to generate HTML code but the general intent should be pretty obvious.