WordPress使用SCS新浪云存储imgx图片服务

592

新浪也推出了自己的云存储服务,有点类似与七牛和又拍云之类的,我关注它也有段时间了,就在最近,我的使用的主题WordPress又升级了,每次添加媒体,缩略图都会自动生成15张,可想而知,每次我写一篇博客,可能就要需要1M-2M的空间去存储我的图片,如果说把图片放在本地,常年累月,我相信空间一定会越来越慢。这个时候我想到了云存储,刚开始我使用的是又拍云,又拍云使用还是比较方便,我们只需要更改两个路径路径代码。

首先需要在wp-includes文件夹中找到functions.php,然后我们找到wp_upload_dir这个定义,然后我们把代码修改为下面这样,就是添加一个临时目录,因为SAE不可写。基本上安装原版又拍云存储插件就可以使用了,非常方便。

$basedir = $dir = SAE_TMP_PATH;

我们今天主要说到是新浪云存储插件,当你真的使用过新浪的一些服务,你才会发现他贵的有道理,不过我个人还是感觉小贵,感觉用新浪云存储有些小贵,之所以我用到新浪云存储,是因为我在用又拍云的时候,居然我用FTP的时候,发现检索出的文件只有1000个限制,我其余的几百个呢?好吧,至少新浪云存储有提供API,我们可以获得XML文件,然后获取其中的文件,当做本地备份,如果有哪天不想用了,我们还可以把文件拿回来。

首先我们需要安装一个WordPress的新浪云存储插件(这说的是废话),具体注册和操作流程在这里就不多说了。当我们都安装好了之后,忽然发现一个头疼的问题,其他的云存储都是把命令放到文件之后,例如:123.JPG!100*200。而新浪的缩略图命令方式是http://imgx.sinacloud.net/yun/c_thumb,g_face,w_400,h_400,r_max,e_brightness:8,f_png/demo/1.jpg

好吧,他把命令放到了中间,这让我们改起来非常有难度。而且官方也没有提供什么太多的解决方案,而有一次我在他们的群里发现一个人的网站用的也是云存储,但图片的显示方式是demo/1.jpg这种类型,这时候才意识到,这不是相对路径吗?ECShop用到的就是这种附件的显示方式,那WordPress呢?其实WordPress也是可以,我在网上找到了一段这样的代码:
打开wp-includes/post.php文件,修改函数wp_get_attachment_url为如下代码:
function wp_get_attachment_url( $post_id = 0 ) {
$file_dir=dirname(__FILE__);
$server_root=$_SERVER[DOCUMENT_ROOT];
$file_dir=substr($file_dir,strlen($server_root));
$file_dir=substr($file_dir,0,-12);
if($file_dir!=”){
$file_dir=’/’.substr($file_dir,1);
}
$post_id = (int) $post_id;
if ( !$post =& get_post( $post_id ) )
return false;
$url = ”;
if ( $file = get_post_meta( $post->ID, ‘_wp_attached_file’, true) ) { //Get attached file
if ( ($uploads = wp_upload_dir()) && false === $uploads[‘error’] ) { //Get upload directory
if ( 0 === strpos($file, $uploads[‘basedir’]) ) //Check that the upload base exists in the file location
//$url = str_replace($uploads[‘basedir’], $uploads[‘baseurl’], $file); //replace file location with url location
$url=$file_dir.”/wp-content/uploads/”.$file;
elseif ( false !== strpos($file, ‘wp-content/uploads’) )
//$url = $uploads[‘baseurl’] . substr( $file, strpos($file, ‘wp-content/uploads’) + 18 );
$url=$file_dir.”/wp-content/uploads/”.$file;
else
//$url = $uploads[‘baseurl’] . “/$file”; //Its a newly uploaded file, therefor $file is relative to the basedir.
$url=$file_dir.”/wp-content/uploads/”.$file;
}
}
if ( empty($url) ) //If any of the above options failed, Fallback on the GUID as used pre-2.7, not recomended to rely upon this.
$url = get_the_guid( $post->ID );
if ( ‘attachment’ != $post->post_type || empty($url) )
return false;
return apply_filters( ‘wp_get_attachment_url’, $url, $post->ID );
}

通过以上代码,我们可以把WordPress使用相对路径,但如果你真的这样做了,你却依然无法使用云存储的图片服务来制作缩略图,所以我们要把下面的命令更改一下,注意符号“”自己给改成英文模式。

$url=$file_dir.”/wp-content/uploads/”.$file;

以上代码的意思大概就是,图片地址是文件的域名,路径,和文件名,我们把前两项去掉,只留下文件名。

$url= $file;

好啦,这是真正的相对路径,之后我们在后面还需要加地址,在这里需要注意一个问题,图片服务的地址是imgx.sinacloud.net,同样也有CDN加速功能,但如果前面没有加IMGX,就不能使用图片服务。

 

因为我们用到的是云存储,后台会不显示图片的,但我们想让前台后台都显示图片,并且我们的网站不能全都使用这一种模式的缩略图吧,所以在上面的代码后面加上下面的代码,这个方法是我通过禁用前台显示JS的方法中得到的。

if(is_admin()){
$url=”http://cdn.sinacloud.net/sifante/”.$file;
}

好了,后台图片显示方法解决了,现在我们来解决前台,因为使用了相对路径,云存储的图片都显示不出来,我们需要更改主题代码,例如我的主题获取缩略图的方式为:

add_image_size(‘thumb’, 180, 180);

add_image_size(‘recommend’, 120, 120);

 

如果多几跳这种命令的话,会生成很多小图片,并且我的主题中有15个这样的命令。

通过这个命令获取180*180的缩略图我的主题有8个模块,例如我的首页用到了四个模块,也就是四种缩略图。在td_module.php当中定义的这些缩略图,这些模块都通过这个文件获取相关参数。如果只更改一个文件,那么就相当于都用到的是一个尺寸,根本就没办法使用,所以我们打开td_module.php这个文件会发现function get_image($thumbType)定义了这些参数,我们把整个定义给复制到用到这些参数的模块中去。代码太长,这里就不举例了。因为使用的是wp_get_attachment_image_src获取缩略图,还有有对应命令:

$buffy .= ‘’;

我们只需要在$td_temp_image_url[0]前面加上云存储的地址imgx.sinacloud.net/缩略图命令/这样前台也显示了云存储的图片,并且使用的是图片服务。

以上方法举一反三,基本上都差不多,云存储的文档都非常专业,对于咱们小白级别的人根本看不懂,我们只是想很便捷的使用其中的服务。

发表意见

Please enter your comment!
Please enter your name here