完美解决新浪SAE下WordPress文章缩略图写入功能

2012-12-1101:23:08 57 42,076
摘要

今天要分享给大家的是一个困扰了明月很久的一个新浪SAE限制的解决办法,使用过新浪SAE的站长朋友们应该都知道在新浪SAE下架设的Wordpress平台是无法对服务器端进行I/O操作的,也就是不能在服务器端写入的,而一些功能完善的WP主题都有自动生成文章内第一张图片为文章缩略图的功能,这个功能一般都是需要在服务器根目录下建一个Cache目录,并且权限为777(可以写入)才可以实现的,碰到这样的主题,新浪SAE就有点儿不适应了,其实新浪SAE下提供有可以供写入的Storage的,只需要将主题需要写入到cacheh目录的操作转成写入到Storage上并且调用时也调用storage上的文件即可。

今天要分享给大家的是一个困扰了明月很久的一个新浪SAE限制的解决办法,使用过新浪SAE的站长朋友们应该都知道在新浪SAE下架设的WordPress平台是无法对服务器端进行I/O操作的,也就是不能在服务器端写入的,而一些功能完善的WP主题都有自动生成文章内第一张图片为文章缩略图的功能,这个功能一般都是需要在服务器根目录下建一个Cache目录,并且权限为777(可以写入)才可以实现的,碰到这样的主题,新浪SAE就有点儿不适应了,其实新浪SAE下提供有可以供写入的Storage的,只需要将主题需要写入到cacheh目录的操作转成写入到Storage上并且调用时也调用storage上的文件即可。

完美解决新浪SAE下Wordpress文章缩略图写入功能

原理很简单,但是让我自已写一个代码出来就我这已经荒废了10年的编程基础基本是不可能的了,还好还有谷歌大神(站长们求医问药的一个良医呀!),于是经过一番不断变换关键词的搜索后,终于让我找到了kn007的个人博客上的【[SAE移植]搞了首页缩略图处理,几个重要部分记录下』一文,在这里要先谢谢kn007了,真心的感谢呀!

可能是主题不同的原因,照着kn007的方法我第一次没有成功,因为需要修改主题下的functions.php文件,所以,第一次不成功就直接造成网站不能访问了!经过今天晚上的研究也终于让我找到一症结出在哪里,现在已经都完美的解决了,先秀一下本站Mossight主题的文章缩略图效果,如下图:

完美解决新浪SAE下Wordpress文章缩略图写入功能

终于可以在首页图文并茂了(点击看大图)

完美解决新浪SAE下Wordpress文章缩略图写入功能

文章下面的相关日志功能,这也是主题自带的,我终于可以删除掉友荐了,呵呵!

WordPress了解的站长们都知道,在WP下实现文章缩略图功能一般都是借助于强大的thumbnails来实现的,而kn007也正是发现了这一点,在functions.php里重写了thumbnails函数来支持新浪SAE的storage的,但是在使用kn007的代码前我们一定要先确定自已所用的主题是不是用thumbnails来实现的,这个可以在主题目录下的functions.php文件里找thumbnail来确定,如果找到了addthemesupport( 'post-thumbnails' );开头的段落,那么一定要记得用kn007提供的代码来替换原有的相应代码,而明月用的主题Mossight目录下的fucntion.php里的thumbnails代码如下:

add_theme_support( 'post-thumbnails' );

function post_thumbnail( $width = 160,$height = 125 ){

 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 {$content = $post->post_content;preg_match_all('/<img.*?(?: |\\t|\\r|\\n)?src=[\'"]?(.+?)[\'"]?(?:(?: |\\t|\\r|\\n)+.*?)?>/sim', $content, $strResult, PREG_PATTERN_ORDER);$n = count($strResult[1]);if($n > 0){echo '<a href="'.get_permalink().'"><img src="'.get_option('siteurl').'/wp-content/themes/Mossight/timthumb.php?w=160&h=125&src='.$strResult[1][0].'" /></a>';} else {echo '<a href="'.get_permalink().'"><img src="'.get_bloginfo('template_url').'/images/random/'.rand(1,10).'.jpg" /></a>';}}}

从上面的代码这句function post_thumbnail( $width = 160,$height = 125 )大家可以看出Mossight主题的文章缩略图的图片尺寸是160X125的,所以在套用kn007的代码时就要把相应有尺寸的地方也改成这个标准的,要不可是会出错的噢,还有,大家要看清代码的开始和结束,因为是要替换的噢。

同时,在使用kn007的代码前一定要先在新浪SAE的Storage里建一个名叫cache的Domain噢,权限为public,当然名字你也可以随便起,但最好是英文名字。目前我将kn007的代码稍做了修改以便适应我的需求,修改后的代码如下:

// 加入缩略图

add_theme_support( 'post-thumbnails' );

function post_thumbnail( $width = 160,$height = 125 ){

global $post;

if( has_post_thumbnail() ){ //如果有缩略图,则显示缩略图

$timthumb_src = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID),'full');

$post_timthumb = '<img src="'.$timthumb_src[0].'"Width="160px" Height="125px" alt="'.$post->post_title.'" class="thumb" />';

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];

if( !empty($first_img_src) ){

$path_parts = pathinfo($first_img_src);

$first_img_name = $path_parts["basename"];

$first_img_pic = 'http://mydl-cache.stor.sinaapp.com/'.$first_img_name;

$first_img_file = $first_img_name;

$s = new SaeStorage();

if ( $s->fileExists("cache",$first_img_file)){

} else {

$f = new SaeFetchurl();

$img_data = $f->fetch( $first_img_src);

$img = new SaeImage();

$img->setData( $img_data );

$img->resize(160,120); // 等比缩放

$content = $img->exec(); // 执行处理并返回处理后的二进制数据

$s->delete("cache",first_img_file);

//$content = @file_get_contents($first_img_src);

@file_put_contents($first_img_pic,$content);

$attr = array('expires' => 'now plus 15 day');

$s->write('cache', $first_img_file, $content, -1, $attr);

$s->upload("cache", $first_img_file,$first_img_src);

//var_dump($s->errno(), $s->errmsg());

$post_timthumb = '<img src="'.$first_img_src.'" alt="'.$post->post_title.'" class="thumb" />';

}

$post_timthumb = '<img src="'.$first_img_pic.'"Width="160px" Height="125px" alt="'.$post->post_title.'" class="thumb" />';

} else   {$post_timthumb = '<img src="'.get_bloginfo("template_url").'/images/random/'.rand(1,10).'.jpg" alt="'.$post->post_title.'" class="thumb" />'; }

echo $post_timthumb;

}

}

大家一定要注意这一行:

$firstimgpic = 'http://mydl-cache.stor.sinaapp.com/'.$firstimgname;

因为这里的网址就是你新浪SAE上的Stroage,那个mydl要改成你的新浪SAE应用名称噢,后面的cache就是你的stroage下Domain的名字,如果你没有起成前面说到的cache记得这里也一定要修改成一致的,还有一句就是:$attr = array('expires' => 'now plus 15 day');这句是设定生成的文件在stroage上的缓存时限的,原代码是7天,为了节省服务器的资源,我修改成了15天,这个大家可以根据自已的需要来调整了。

上述代码的最后一句也就是

else   {$posttimthumb = '<img src="'.getbloginfo("templateurl").'/images/random/'.rand(1,10).'.jpg" alt="'.$post->posttitle.'" class="thumb" />'; }

这一段,可能会根据你的主题不同而有所变化,这一句的作用是在文章没有引用图片时就调用一个默认的,我的这个修改是根据我自身的主题来修改的,大家可以根据自已主题原有的thumbnails代码来调整的。

好了,经过上述的修改和设定后,用SVN上传你修改完的functions.php文件,并打开你的新浪SAE网站,第一次可能会慢一些,因为服务器端需要生成相应的缩略图文件,所以请耐心等候,照新浪SAE的速度很快就会生成完成的,这时大家应该就可以看到带有缩略图的文章列表了,当然在新浪SAE的storage里也可以看到生成的文件已经存在了。

悲催的用scribeFire写本文的时候竟然一不小心把浏览器给关闭了,再次打开时什么都没有了,这就是不及时“保存进程”的恶果呀,害的我还得重新写一遍,郁闷死了!!!如果大家还有什么不明白的,欢迎在评论中提出噢,我将知无不言,谢谢大家的支持了,再次感谢kn007的无私贡献,呵呵!睡觉去了,有事儿留言吧,留言必回的!

本文最后更新于2015年11月10日,已超过 1 年没有更新,如果文章内容或图片资源链接失效和错位的,请留言反馈,我们会及时处理,谢谢!

历史文章推荐:

  • 本博客公众号
  • 扫一扫关注!
  • weinxin
  • 本博客小程序
  • 微信内浏览本博客
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:57   其中:访客  31   博主  24

    • 爱眼博客 爱眼博客 1

      来看看你

      • Lystery Lystery 0

        看来还是有人用SAE的 _(:зゝ∠)_

        • 读你 读你 0

          我的functions.php文件中只有add_theme_support( ‘post-thumbnails’ );下面没有post_thumbnail方法了、、、我直接添加在add_theme_support( ‘post-thumbnails’ );这一行下面,Storage也改了,没效果啊、、、 :sad:

            • 明月登楼 明月登楼 Admin

              @读你 你的主题用的不是thumbnails缩略图,所以没有这个!

            • 音悦台 音悦台 1

              弄了一下 首页移位了咋办

              • 关岛属于哪个国家 关岛属于哪个国家 1

                感谢无私贡献