frontopen2是一款非常不错的主题,本博客用的就是这个主题。该主题的原作者将它免费分享出来,晨风等人继续做了维护和开发,主题非常的棒,这里强力推荐一下。我平时非常喜欢每篇文章都有一个缩略图,但是该主题如果文章中没有图片,则不会显示缩略图,向风哥反映希望加上随机缩略图,但是他表示不会增加这个特性。木有办法,只有自己动手,丰衣足食了。首先声明,本人不会什么前端开发,只能根据C、C++等语言的语法去推测、试验php语法等,费了好大劲才增加了这个功能。这里写出来一方面给自己做个笔记,另一方面给和我一样有这个喜好的人分享一下。

这个功能的实现主要更改两个文件(当然更改方法不唯一):functions.php和loop.php。

functions.php中的修改:在“timthumb缩略图函数function post_thumbnail( width,$height,$dataSrc)”中做如下修改

修改前

} else {//如果日志中没有图片,则显示默认
    if(isset($dataSrc)){
       $post_timthumb = '<img '.$dataSrc.'="'.get_bloginfo("template_url").'/images/default_thumb.gif" alt="'.$post->post_title.'" />';
    }else{
       $post_timthumb = '<img src="'.get_bloginfo("template_url").'/images/default_thumb.gif" alt="'.$post->post_title.'" />';
         }
}

修改后

} else {//如果日志中没有图片,则显示默认
    if(isset($dataSrc)){
	$random = mt_rand(1, 50);
        $post_timthumb = '<img '.$dataSrc.'="'.get_bloginfo("template_url").'/images/pic/'.$random.'.jpg" height="'.$height.'" width="'.$width.'" alt="'.$post->post_title.'" />';
    }else{
	$random = mt_rand(1, 50);
        $post_timthumb = '<img src="'.get_bloginfo("template_url").'/images/pic/'.$random.'.jpg" height="'.$height.'" width="'.$width.'" alt="'.$post->post_title.'" />';
	}
}

可以看出,主要做了两方面的修改:

  1. 将默认的图片改为随机的图片。当然,你需要在主题的images目录下,放一个pic目录,里面存放你想要显示的图片,然后将图片的个数写在mt_rand()函数里面,我这里pic里面有50张图片。
  2. 增加了height和width变量。这两个的作用是根据文章比例等对缩略图进行裁剪。如果不增加这两个变量,我们会发现缩略图片的大小非常的混乱,不一样大。

我们刚才也看到,默认的主题代码里面,当文章中没有图片时,是会显示/images目录下的default_thumb.gif图片的,但为什么没有显示呢?我们再看下面第二个要修改的文件。

loop.php中的修改:大概在79行

修改前

 <?php post_thumbnail($imgW,$imgH,lateLoad('data-').'src');
	if(has_excerpt()) the_excerpt();
	else
	    echo dm_strimwidth(strip_tags($post->post_content),0,$dis_num,'....');}
	elseif(catch_that_image()){post_thumbnail($imgW,$imgH,lateLoad('data-').'src');?>
修改后

<?php post_thumbnail($imgW,$imgH,lateLoad('data-').'src');
	if(has_excerpt()) the_excerpt();
	else
	    echo dm_strimwidth(strip_tags($post->post_content),0,$dis_num,'....');}
	elseif('allan'){post_thumbnail($imgW,$imgH,lateLoad('data-').'src');?>

我们可以看到,唯一的修改就是将elseif中的catch_that_image( )函数替换成了一个非空字符串(这里写的是'allan',可以替换为任意非空字符串)。这里为什么要这样修改呢?我们看一下catch_that_image( )这个函数,这个函数在functions.php中,就是timthumb缩略图函数function post_thumbnail( width,$height,$dataSrc)的前一个函数:

//截取第一张图片函数
function catch_that_image() {
	global $post;
	$first_img = '';
	ob_start();
	ob_end_clean();
	$output = preg_match_all('/<img.+src=['"]([^'"]+)['"].*>/i', $post->post_content, $matches);
	if($matches[1]){
		$first_img = $matches[1][0];
	}
	if(empty($first_img)){
		$first_img = '';
	}
	return $first_img;
}
//end

我们可以看到,这个函数就是用于获取文章中的第一张图片,如果有,就返回相关的非空字符串,如果文章中没有图片,则返回空字符串,这样的话在上面的判断中,如果没有图片,catch_that_image( )函数就返回空,那么后面的缩略图就不会执行。所以,虽然源代码指定了文章中没有图片时所要显示的缩略图,但其实当文章中没有图片时,显示缩略图的函数根本就不会执行,所以也就没有显示。现在我们将那里更改为一个非空字符串,这样不管怎么样,都会显示缩略图,然后我们在指定一下文章中没有图片时所要显示的缩略图,就可以完成缩略图显示的功能。

最后说明一下,显示缩略图的优先级顺序是:指定的缩略图 > 文章中第一张图片 > 随机缩略图。