自 WordPress 2.5 开始,引入了一项新的功能,那就是 Gallery(就叫它相册功能吧)。不过好像从加入这个功能一直到现在,官方开发人员也没有把太多的精力放在这个上面。WP 2.5 仅仅是加入了这个功能,并提供了部分的调用参数。WP 2.6 的时候增加了相册中图片的排序功能。一直到了现在即将发布的 WP 2.7,也只是加入了 TinyMCE 中调整相册显示的一些参数。
而 Gallery 从引入那天起,他的内在功能还不光是这么点东西。从开始的生成一张小尺寸缩略图和一张中等尺寸的预览图以外。WP 2.7 的上传系统还可以为我们生成一张大尺寸的图片。虽然都可以称得上是缩略图。不过如果要好好利用一下,还真得可以丰富一下您的站点。
还有就是 Gallery 引入那天起,在上传图片的时候,如果原始图片内含有 Exif,那么程序也会将这些信息提取出来,并存储在 WP 的数据库中。这些信息包含了相片的光圈、曝光时间、焦距、镜头品牌型号、摄影时间等等大家所熟悉的信息。可是从官方的默认主题,到现在市面上能够找到的各 主题中,并没有发现能够显示这些信息的地方。
我可能是爱转牛角尖,又或者是完美主义者。从 WP 有了相册功能以后,我就彻底放弃了第三方的相册程序。毕竟,原生的功能,以后升级程序,不用考虑第三方插件的兼容问题。而对 Gallery 的研究,我也做了一点点。那么下面我就把我对 Gallery 的显示功能的完善步骤说一下。也许对您以后制作主题有所帮助。
我的目的是在不修改核心代码的前提下对相册进行完善。所以,所有的工作都是通过修改主题文件来完成的。
WordPress 的 Gallery 在对外显示的时候,需要调用主题中名为“image.php”的一个文件。该文件主要的目的就是将某张相册中的图片以内嵌的形式显示在该页面上。而默认主 题的该文件,还会显示出“上一张”和“下一张”图片的缩略图。具体是怎么个运作方式以及如果修改您的主题支持这种现实方式,可以参考我以前写的《让您当前的主题支持 WordPress 2.5 的相册功能》。该文章讲述了如何将您原有的主题经过修改来正确使用 Gallery 功能。
接下来,我们继续对 Gallery 的页面进行完善。挖掘出 WordPress 为我们提供的几乎所有功能。
WP 在上传文件的时候,会将识别出的相关信息,都放在 Postmeta 表当中。而某些记录的数据,是很有意义的(当然,所有数据都是有他的作用的,但某些数据,如果显示出来,会更有意思。)。
我们可以使用以下的方式来调取图片的 Exif。理论上来说,放在 the_content() 的后面比较好。
$imgmeta = wp_get_attachment_metadata( $id );
这样,我们就将图片完整的 Meta 信息给调取出来了。然后使用下面的代码来显示 Meta 的细节信息:
$imgmeta['width']
原始图片的宽度。
$imgmeta['height']
原始图片的高度。
$imgmeta['image_meta']['aperture']
光圈大小。
$imgmeta['image_meta']['credit']
摄影师名称。(貌似没有可用的数据)
$imgmeta['image_meta']['camera']
相机或镜头的品牌和型号。
$imgmeta['image_meta']['created_timestamp']
拍摄时间。
$imgmeta['image_meta']['copyright']
版权信息。(貌似也没有啥可用信息)
$imgmeta['image_meta']['focal_length']
焦距信息,单位为毫米。
$imgmeta['image_meta']['iso']
ISO 信息。(爱好摄影的朋友不用我解释这是啥玩意吧?)
$imgmeta['image_meta']['shutter_speed']
快门速度。
$imgmeta['image_meta']['title']
标题信息。(还是没啥数据可显示。)
$imgmeta['image_meta']['caption']
说明信息。(一样是没有可显示的信息。)
以上这些信息,摄影师名称、版权信息、标题信息和说明信息。貌似总获得不了什么可用的信息。也可能是由于原始照片中根本就不包含这些信息的缘故吧,总是什么也不显示。不过其他的那些信息还是会显示很完整的。
如果想显示这些信息,首要的条件是您上传的原始图片中需要包含这些信息。可以通过在您的操作系统中查看图片的属性来获知是否包含以上信息。如果不包含你,那么上面这些信息将无法显示,而摄影时间那个地方会显示一个很怪异的时间。这属于正常现象。
调用的方式知道了,那么现在您就可以使用下面的代码来显示上面的信息了:
<?php
if (is_attachment()) :
$imgmeta = wp_get_attachment_metadata( $id );
echo “<ul>n”;
echo “<li>标题:” . $imgmeta['image_meta']['title'].”</li>n”;
echo “<li>介绍:” . $imgmeta['image_meta']['caption'].”</li>n”;
echo “<li>尺寸:” . $imgmeta['width'].” x “.$imgmeta['height'].”</li>n”;
echo “<li>光圈:f/” . $imgmeta['image_meta']['aperture'].”</li>n”;
echo “<li>镜头:” . $imgmeta['image_meta']['camera'].”</li>n”;
echo “<li>时间:” . date(“Y-m-d H:i”, $imgmeta['image_meta']['created_timestamp']).”</li>n”;
echo “<li>版权:” . $imgmeta['image_meta']['copyright'].”</li>n”;
echo “<li>焦距:” . $imgmeta['image_meta']['focal_length'].”mm</li>n”;
echo “<li>ISO:” . $imgmeta['image_meta']['iso'].”</li>n”;
echo “<li>作者:” . $imgmeta['image_meta']['credit'].”</li>n”;
echo “<li>快门:” . number_format($imgmeta['image_meta']['shutter_speed'],5).” seconds</li>n”;
echo “”;
endif;
?>
以上代码需要注意几个地方:
- 快门速度那一行中的那个唯一的数字,是代表显示小数点后面多少位。建议使用 5 位。因为数据库中是按照这个位数记录的。如果小于 5 位,将会四舍五入。
- 部分信息如果没有可显示的数据,完全可以删除掉那一行代码。
- 摄影时间部分,具体的日期书写格式,可以参考 PHP 的日期书写格式文档来进行修改。
- 如果前面的介绍文字使用中文,请将 image.php 文件保存为 UTF-8 无 BOM 格式。切记……
按照上面的方法,您就可以在显示图片的同时,将图片的 Exif 显示出来了。而不需要借助任何插件。很简单不是吗?
下面再介绍一下我结合 WP 2.7 的新附件系统,对主题修改的方案。
WordPress 2.7 的上传系统,从原来生成两种尺寸的图片增加到了三个。暂且不去管它的大中小尺寸的名称。单单是多出来的这一种尺寸,就可以让我们小小完善一下我们的相册页面。
目前,本站生成缩略图的方案是这样设置的:
小尺寸(100 x 100)不进行裁切,这样可以保留原始尺寸的高宽尺寸比例,看起来有点变化。(根据自己的习惯决定是否开启裁切。)
中尺寸(200 x 200)原来我的小尺寸是设置的这个数值,不过默认插入相册的时候一横排三个图片,导致我选择主题的范围缩小了很多。没有几个主题正文部分的宽度是 600 多像素的。现在该尺寸图片作为图文混排用。
大尺寸(400 x 400)这是 WordPress 2.7 新增的可用尺寸。我将该尺寸应用于相册页面上那个较大尺寸的图片。
有点迷糊了?那我简单一点说,就是我原来小尺寸设置的是 200,中尺寸是 400。现在增加了一种尺寸,那我就将小尺寸设置为 100,中尺寸为 200。属于照比原来,增加了一种 100 尺寸的图片。
附件的问题解决了,图片的素材有了。接下来需要对主题的文件进行一点点修改,来适应这种变化。
默认主题的 image.php 文件中,显示较大图片的那行代码如下:
<a href=”<?php echo wp_get_attachment_url($post->ID); ?>”><?php echo wp_get_attachment_image( $post->ID, ‘medium’ ); ?>
我将其改为:
<a href=”<?php echo wp_get_attachment_url($post->ID); ?>”><?php echo wp_get_attachment_image( $post->ID, ‘large’ ); ?>
这样,那个较大尺寸的图片,调取的就是 400 的那个图片了。而部分主题,这个地方可能写的是 Full,意味着调取的是原始图片。我不建议这样做,因为如果您的原始图片文件比较大,会严重影响页面载入速度。既然有缩略图,干嘛不用呢?
该处可以改为“Thumbnail”、“Medium”、“Large”和“Full”等几种不同的参数来调取不同尺寸的图片。根据您的需要进行调整吧。
如果您像我一样,想要根据新定义的尺寸重新生成附件的缩略图。推荐您使用 Regenerate Thumbnails 这个插件,可以满足您的需要。该插件在安装到 WP 2.7 中时,如果出现无法找到附件的情况,请将源文件的第 72 行:
$attachments = get_children( ‘post_type=attachment&post_mime_type=image’ );
替换为:
$attachments = get_children( array( ‘post_parent’ => $post_id, ‘post_type’ => ‘attachment’, ‘orderby’ => ‘menu_order ASC, ID’, ‘order’ => ‘DESC’) );
好哩!叨叨完了。文章中如果有什么错误的地方,希望能够指出。根据该篇文章介绍的内容,对您的 image.php 文件进行的调整,会不会让您的博客更那啥一点呢?只要有所改变,不管是好是坏,我就算没白写。起码有效果了。哈哈~~~~~~