会做WordPress主题的人应该都知道,使用include(TEMPLATEPATH. “xxx.php”)这样的PHP代码可以调用xxx.php中的内容,从而让主题结构更有条理性。
但可能很多人不知道WordPress短代码(WordPress ShrotCode API), 它从WordPress 2.5开始应用,可以让开发设计人员通过简单的函数集合创建宏代码来生成内容。代码形式类似于论坛普遍支持的UBB代码:
[pargallery
更重要的是WordPress短代码是支持属性的,类似:
[pagallery id="123" size="medium"]
对于我个人为说,最近才听说这个东西,且用”(“和”{“用习惯了,还不打算去深究这个东西。且WordPress的模板代码也不算复杂,除非要拿它来做大型站点,否则似乎也不需要。
下面是WordPress啦(精通WordPress简码)翻译自SM(Mastering WordPress Shortcodes)的一篇文章,详细的介绍了如何使用WordPress短代码。
创建简码非常简单。如果你知道如果编写基本的PHP函数,你也就了解了如何创建WordPress简码。我们首先来创建一个众人皆知的“Hello, World”吧。
function hello() {
return 'Hello, World!';
}
add_shortcode('hw', 'hello');
[hw]
大功告成!当然,这只是最最基本的简码,但它也足以说明创建简码是多么简单的一件事!
正如以上所说,简码中可以包含属性,这非常有用,例如,它可以赋予函数参数。接下来,我们将共同了解如何创建可以显示URL的简码,正如使用诸如VBulletin 和PHPBB论坛的用户使用BBCode一样
function myUrl($atts, $content = null) {
extract(shortcode_atts(array(
"href" => 'http://'
), $atts));
return ''.$content.'';
}
add_shortcode("url", "myUrl");
[url href="http://www.wprecipes.com"]WordPress recipes[/url]
日志保存后,简码会显示名为“WordPress recipes”的链接,并指向http://www.wprecipes.com。
代码注释:若要正常运行,简码必须处理两个参数:$atts 和 $content。$atts是简码属性,上例中,属性为href,且包括了URL链接。$content是简码内容,位于域名和子目录之间(即www.example.com和“/subdirectory”之间)。正如以上显示,我们给$atts 和 $content都设置了默认值。
既然已经知道如何创建和使用简码,接下来我们就继续了解杀手级的可立即使用的简码吧。
问题:许多人似乎都比较喜欢我的十个杀手级Hack技巧中所介绍的“发送到Twitter”技巧,包括我本人也非常喜欢,但它有一个缺陷:如果把代码粘贴到single.php文件中,“发送到Twitter”链接将出现中所有的日志中,这可能并不是大家想要的结果。若能控制这个技巧,使链接只出现在我们想要其出现的日志中将十分有用。不用着急,方法十分简单:
解决方案:将要使用的简码十分容易创建,只要把“发送到Twitter”hack中的代码转化成PHP函数即可。复制以下代码到functions.php文件中:
function twitt() {
return '';
}
add_shortcode('twitter', 'twitt');
使用此简码,只需把编辑器切换到HTML模式,输入:
[twitter]
然后,“发送到Twitter”链接就会只出现放置简码的位置。
问题:我们已经知道获取RSS订阅的一个较好途径就是在首页放置一个精致漂亮的“RSS feed订阅”图示。但是,我们其实并不想在主题中使用硬码,这样我们对显示内容就失去了控制权。为此,我们在此将创建“RSS订阅”简码,这样你就可在任意位置显示订阅图示了。
解决方案:同样,我们需要创建函数并把其转换成简码,然后把其放到functions.php文件中。记得把示例中的feed URL换成自己的URL!
function subscribeRss() {
return '';
}
add_shortcode('subscribe', 'subscribeRss');
设计显示框:你或许注意到了div元素中含有rss-box类,它是为了让你能够定制显示框的样式。以下是“RSS订阅”显示框可应用的CSS样式,把其复制到style.css文件中即可:
.rss-box{
background:#F2F8F2;
border:2px #D5E9D5 solid;
font-weight:bold;
padding:10px;
}
问题:许多博主都在使用Google AdSense,在主题文件如sidebar.php 添加AdSense编码非常容易,但有经验的网络营销师都明白访客点击最多的还是嵌入在文章内部的广告。
解决方案:若在日志或页面中嵌入AdSense广告,需创建以下简码:
function showads() {
return '
';
}
add_shortcode('adsense', 'showads');
[adsense]
注意AdSense代码被adsense div元素包装,这样我们就可以在style.css文件中设计其样式。
代码注释:以上代码用来显示AdSense广告。当把简码插入日志中时,它就会返回AdSense广告。这一切都非常简单,同时也节省了大量时间。
问题:许多读者似乎也非常喜欢我之前在Smashing杂志发布的8 RSS Hacks for WordPress”。现在,就让我们一起运用对RSS和简码的了解来在日志和页面中嵌入RSS阅读器。
解决方案:与以上类似,把以下代码复制到主题中的function.php文件中:
//This file is needed to be able to use the wp_rss() function.
include_once(ABSPATH.WPINC.'/rss.php');
function readRss($atts) {
extract(shortcode_atts(array(
"feed" => 'http://',
"num" => '1',
), $atts));
return wp_rss($feed, $num);
}
add_shortcode('rss', 'readRss');
为了使用简码,输入:
[rss feed="http://feeds.feedburner.com/wprecipes" num="5"]
feed属性(attribute)即是要嵌入的feed URL,num即是要显示的条目数量。
问题:幻想过直接从WordPress编辑器中调用一系列相关文章吗?当然,“相关文章”插件可以为我们检索文章,但是使用简码我们就可从特定类别中轻松获取任何数量的文章。
解决方案:把以下代码复制到functions.php文件中:
function sc_liste($atts, $content = null) {
extract(shortcode_atts(array(
"num" => '5',
"cat" => ''
), $atts));
global $post;
$myposts = get_posts('numberposts='.$num.'&order=DESC&orderby=post_date&category='.$cat);
$retour='';
foreach($myposts as $post) :
setup_postdata($post);
$retour.='- '.the_title("","",false).'
';
endforeach;
$retour.='
';
return $retour;
}
add_shortcode("list", "sc_liste");
然后,在切换到HTML模式后,复制以下内容到WordPress编辑器中:
[liste num="3" cat="1"]
接着系统将从ID为1的类别中提取3篇文章。关于如何获取特定类别的ID,可参考这里。
代码注释:系统提取参数并创建全局变量$posts后,sc_liste()函数使用了get_posts(),numberposts, order, orderby和category参数以从类别Y中获取X篇最新日志。完成后,系统就会以无序的HTML列表形式显示日志。
问题:WordPress可以很容易的操纵图像。但是如何使其更加简单呢?使用稍微复杂一点的简码就可自动获取日志中的最新图像了。
解决方案:打开functions.php文件,并把以下代码复制其中:
function sc_postimage($atts, $content = null) {
extract(shortcode_atts(array(
"size" => 'thumbnail',
"float" => 'none'
), $atts));
$images =& get_children( 'post_type=attachment&post_mime_type=image&post_parent=' . get_the_id() );
foreach( $images as $imageID => $imagePost )
$fullimage = wp_get_attachment_image($imageID, $size, false);
$imagedata = wp_get_attachment_image_src($imageID, $size, false);
$width = ($imagedata[1]+2);
$height = ($imagedata[2]+2);
return ''.$fullimage.'';
}
add_shortcode("postimage", "sc_postimage");
接着,在切换到HTML模式后,复制以下内容到WordPress编辑器中:
[postimage size="" float="left"]
代码注释:sc_postimage()函数首先提取了简码属性,然后它使用get_children(), wp_get_attachment_image() 和wp_get_attachment_image_src()这些WordPress函数检索图像。完成后,系统就会返回图像并插入到文章内容中。
问题:即使大家非常喜欢此文,如果本文到此停止,大家也难免有点泄气,因为它还未解决WordPress默认情况下不允许在侧边栏微件中使用简码这一难题。可喜的是,接下来就将介绍一些小技巧以提升WordPress性能并在侧边栏微件中使用简码。
解决方案:打开functions.php文件,并把以下代码复制其中:
add_filter('widget_text', 'do_shortcode');
大功告成!