罗孚传说

RoverTang.com

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

WordPress中的幻灯效果一般用于首页广告展示,我想不少一部分人应该有这样的需求,我也曾经尝试很多的插件,但总觉得不够满意,包括HelloFlash插件,他们最致命的缺点是什么?我列举两条:

1、一般幻灯效果插件都会去搜索文章中的第一张图片,发现有图片就放入到幻灯中。这似乎有点过份,因为我并不需要每一篇文章都需要放到幻灯广告里去。那么做的稍微好一点的呢,就要求你指定一个目录,但仍然不能指定哪一篇文章放到幻灯,所以完全不符合我的需求。

2、HelloFlash插件应该说是非常满足我需求的一个插件,可以自定义将文章放入到幻灯中去,使用自定义模式就可以,但唯一要做的是:发表文章的时候需要添加一个自定义字段flash_image,值就是图片的链接地址了。但是,我不能接受如此繁琐的操作,特别不能接受的是自定义一个字段。

以上都是我所遇到的问题,后来我在使用Simplybiz模板(下次和大家分享这个模板,非常适合企业站,并且我有意向将它的幻灯给改良一下)的时候,竟然可以添加独立的幻灯链接,很让我欣喜,想把它改造一下以满足我的需求,不过老外写的主题还是挺复杂的,而且不是插件,让我把主题的一个功能改成一个插件,我放弃了,我相信凭借我的三脚猫功夫我肯定做不到。不过,至少这个主题给了我一个思路,主题中引用了一个叫“特色图像”的功能,英文称之为Featured image,虽然在WP2.9的版本中就开始支持这个功能,但真正的开放算是在3.0的版本中,现在WP都已经到3.1.2版本了这个功能自然是成熟了。

为了得到自动将文章添加到幻灯的效果,我要求操作简单,即:发表文章的时候,指定一个“特色图像”,这样发表的文章就自动加入到幻灯中了。

根据我的猜测,既然HelloFlash插件使用了自定义字段flash_image,那么,我只需要将这个字段改成特色图像的字段就可以实现。查看HelloFlash的code果真如此,两个模式写了两个SQL语句。然后我去找特色图像这个字段,转了一大圈终于知道,特色图像字段在postmeta表中,其中meta_key字段的值为“_thumbnail_id”的即为特色图像,这一条记录的post_id表示文章在post表中的ID号,meta_value的值为图像附件在post表中的ID号。但在这个的过程中,遇到难题了,一个表中查询出两条记录并且他们的Where关键都是在另一个表中,不过最后还是解决了,将同一个表重复了一下,看上去是在三个表中查询,最后就可以得到结果了。这个SQL查询难了我好一会,不过看了上面的SQL语句得到的灵感,还不错。需要将插件的flash.php文件中的如下code:

SELECT a.post_title AS title, a.guid AS link, b.meta_value AS img
FROM wp_posts AS a, wp_postmeta AS b
WHERE meta_key = 'flash_image'
AND a.post_type = 'post'
AND b.post_id = a.id
ORDER BY `a`.`id` DESC
LIMIT 6

更改为如下code:

SELECT a.post_title AS title, a.guid AS link, c.guid AS img
FROM wp_posts AS a, wp_postmeta AS b, wp_posts AS c
WHERE b.meta_key = '_thumbnail_id'
AND a.ID = b.post_id
AND c.ID = b.meta_value
ORDER BY `a`.`id` DESC
LIMIT 6

需要稍稍注意一下的是:作者偷懒将表的名字直接写死了,所以若不是“wp_”表头的则需要你自己将上面的改成与你对应的头。

这样以后,事情还没有完,将插件上传,然后激活,并进入HelloFlash的设置,需要设置为自定义模式,长宽由你自己确定,如下图示意:

image

再说一次:长宽设置成你自己的哦。

好了,接下来就需要更改模板的代码了。一般是在首页显示幻灯,所以在首页模板中你需要幻灯的位置插入如下代码:

if(function_exists(flash)) { flash();     }

经过以上折腾,虽然算是一切完毕了,但也许你的模板还不支持“特色图像”功能,如何打开这个功能呢?方法:打开模板中的functions.php文件,添加如下code,这样你在发表文章的时候就可以看到设定特色像的功能了。

if ( function_exists( 'add_theme_support' ) ) {
  add_theme_support( 'post-thumbnails' );
}

 image

好了,这才算是真正折腾完。至于前台表现的部分,你可以再继续自行优化。顺便说一下这个插件的问题:

1、每次调用,都是查询数据库,如果做成缓存,是否更佳?不过我暂时没有想法去折腾了。

2、有些模板本身支持特色图像功能,一般是放在首页文章的前边,这是最常规的做法,但这样的话就会导致:你幻灯里的图片大小和文章期望的图片大小不一致,这样的就肯定算是冲突了,两者只能二选一,除非你用回原版的HelloFlash,或者让模板不使用特色图像,小有痛苦,不过我想这样的需求应该在少数。

好了,可以去我的实验室下载我改良版的HelloFlash插件

posted on 2011-05-13 01:46  Rover.Tang  阅读(1312)  评论(0编辑  收藏  举报