北极寒流 » 网络资源 » 利用timthumb实现WordPress全自动日志缩略图功能 - 2011.06.30

利用timthumb实现WordPress全自动日志缩略图功能

利用timthumb.php实现WordPress全自动日志缩略图功能。timthumb.php这是一个专门为 WordPress 而开发的缩略图应用的项目。有点类似于插件,但是又和 WordPress 插件不同,因为它不是被上传于 plugins 文件夹下,而是需要上传到你的主题文件夹中。你可以在这里了解和下载最新版本的 timthumb.php,一般默认配置也就可以了,如果想进一步优化可以根据需要修改 timthumb.php 里前30行的参数

默认情况下timthumb.php是不支持外链图片的,需要修改一下timthumb.php的参数实现支持外链图片

define (‘ALLOW_EXTERNAL’, TRUE);

下面就是结合了 timthumb.php 和 WordPress 自带的缩略图功能,支持站外链接图片,自动缓存图片的可以全自动日志缩略图功能的代码。代码如下:

function post_thumbnail( $width = 100,$height = 80 ){
    global $post;
    if( has_post_thumbnail() ){ //有缩略图,则显示缩略图
        $timthumb_src = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID),'full');
        $post_timthumb = '<img src="'.get_bloginfo("template_url").'/timthumb.php?src='.$timthumb_src[0].'&amp;h='.$height.'&amp;w='.$width.'&amp;zc=1" alt="'.$post->post_title.'" class="thumb" />';
        echo $post_timthumb;
        } else{
    if ($postid<1)
    $postid = get_the_ID();
    $image = get_post_meta($postid, "image", TRUE); // 调用自定义域图片
    $post_timthumb = '<img src="'.get_bloginfo("template_url").'/timthumb.php?src='.$image.'&amp;h='.$height.'&amp;w='.$width.'&amp;zc=1" alt="'.$post->post_title.'" class="thumb" />';
    if ($image != null or $image != '') {
        echo $post_timthumb;
        } else {
        $post_timthumb = '';
        ob_start();
        ob_end_clean();
        $output = preg_match('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $index_matches);    //获取日志中第一张图片
        $first_img_src = $index_matches [1];    //获取该图片 src
        if( !empty($first_img_src) ){    //如果日志中有图片
            $path_parts = pathinfo($first_img_src);    //获取图片 src 信息
            $first_img_name = $path_parts["basename"];    //获取图片名
            $first_img_pic = get_bloginfo('wpurl'). '/cache/'.$first_img_name;    //文件所在地址
            $first_img_file = ABSPATH. 'cache/'.$first_img_name;    //保存地址
            $expired = 604800;    //过期时间
            if ( !is_file($first_img_file) || (time() - filemtime($first_img_file)) > $expired ){
                copy($first_img_src, $first_img_file);    //远程获取图片保存于本地
                $post_timthumb = '<img src="'.$first_img_src.'" alt="'.$post->post_title.'" class="thumb" />';    //保存时用原图显示
            }
            $post_timthumb = '<img src="'.get_bloginfo("template_url").'/timthumb.php?src='.$first_img_pic.'&amp;h='.$height.'&amp;w='.$width.'&amp;zc=1" alt="'.$post->post_title.'" class="thumb" />';
        } else {    //如果日志中没有图片,则显示默认
            $post_timthumb = '<img src="'.get_bloginfo("template_url").'/images/default.gif" alt="'.$post->post_title.'" class="thumb" />';
        }
        echo $post_timthumb;
    }
}}

把上述代码放在functions.php 里,然后再用

<?php post_thumbnail( 100,100 ) ?>

这样调用即可,其中的 $width 和 $height 是必须的参数。上述代码意思是如果文章有wordpress自带缩略图,则调用自带缩略图,没有的话则调用自定义域“image”图片作为缩略图,再没有的话就自动截取文章第一张图做为缩略图,如果连图片都没有的话,那就显示一张默认图片。

代码来自http://wange.im/timthumb-for-wordpress.html

再更新一份也不错的可以实现相同功能的代码

function dm_the_thumbnail() {
global $post;
$content = $post->post_content;
// $soImages = '~<img [^>]* />~';
preg_match_all('/<img.*?(?: |\\t|\\r|\\n)?src=[\'"]?(.+?)[\'"]?(?:(?: |\\t|\\r|\\n)+.*?)?>/sim', $content, $strResult, PREG_PATTERN_ORDER);
$n = count($strResult[1]);
$m = substr_count($strResult[1][0], 'timthumb.php'); //判断图片是否已经用timthumb显示
if ($n > 0){ // 如果文章内包含有图片,就用第一张图片做为缩略图
if ($m ==1 ) {
echo '<a href="'.get_permalink().'" title="阅读全文"><img class="alignleft" src="'.preg_replace("/&h.*zc=1/","",$strResult[1][0]).'&amp;h=140&amp;w=140&amp;zc=1" alt="缩略图" /></a>';
} else { //如果没有timthumb则补充
echo '<a href="'.get_permalink().'" title="阅读全文"><img class="alignleft" src="'.get_bloginfo('template_url').'/timthumb.php?src='.$strResult[1][0].'&amp;h=140&amp;w=140&amp;zc=1" alt="缩略图" /></a>';
}
}
else { // 如果文章内没有图片,则用默认的图片
echo '<a href="'.get_permalink().'" title="阅读全文"><img class="alignleft" src="'.get_bloginfo('template_url').'/images/timthumb.gif" alt="缩略图" /></a>';
}
}

代码来自http://www.zhanggang.net/y2011/39304.html

评论关闭