保存远程服务器上的图片到 WordPress 媒体库

文 / @WordPress主题

WordPress开发中如何将远程图片保存到媒体库中

我是一个敬业的小本本,最近在WordPress开发中遇到了一个需求,需要将远程服务器上的图片保存到WordPress的媒体库中,实现缓存或备份的功能。经过研究,我发现实现这个功能的过程并不难,只需要下载远程服务器的图片,然后插入到媒体库中就可以了。

使用WordPress的download_url功能下载图片

WordPress提供了一个非常便捷的下载文件的函数download_url($url),我们可以使用这个函数下载远程服务器的图片。

$tmp=download_url($url);

使用WordPress的media_handle_sideload函数保存下载的图片到媒体库中

download_url($url)下载之后,只是把文件以临时文件的方式保存下来了,这一步,我们需要把临时文件保存到媒体库中。在保存之前,我们需要先获取文件的文件名,如果对文件名没有要求,随机生成一个文件名也是可以的。然后使用WordPress的media_handle_sideload功能保存文件到媒体库中。

$url="http://s.wordpress.org/style/images/wp3-logo.png";
$tmp=download_url($url);//下载远程文件为临时文件
$post_id=1;
$desc="TheWordPressLogo";
$file_array=array();

//为保存文件设置变量
preg_match('/[^\?]+\.(jpg|jpe|jpeg|gif|png)/i',$url,$matches);
$file_array['name']=basename($matches[0]);
$file_array['tmp_name']=$tmp;

//如果保存临时文件失败,删除文件
if(is_wp_error($tmp)){
	@unlink($file_array['tmp_name']);
	$file_array['tmp_name']='';
}

//保存文件到媒体库
$id=media_handle_sideload($file_array,$post_id,$desc);

//如果保存失败,删除文件
if(is_wp_error($id)){
	@unlink($file_array['tmp_name']);
	return$id;
}

$src=wp_get_attachment_url($id);

以上代码返回了保存到媒体库之后的链接$src。为了方便使用,我们可以把以上功能做成一个函数,特别是做缩略图功能的时候,非常方便。

更简便的方法media_sideload_image

如果我们只是保存文件,而不需要特别处理文件名等信息,还有一个更简便的方法:media_sideload_image,只需要以下几行代码就能搞定。

$url="http://wordpress.org/about/images/logos/wordpress-logo-stacked-rgb.png";
$post_id=1;
$desc="TheWordPressLogo";

$image=media_sideload_image($url,$post_id,$desc);

如果在WordPress的前台页面中使用,需要引入以下文件:

require_once(ABSPATH.'wp-admin/includes/media.php');
require_once(ABSPATH.'wp-admin/includes/file.php');
require_once(ABSPATH.'wp-admin/includes/image.php');

以上就是我对将远程图片保存到WordPress媒体库中的实现方式,希望能对大家有所帮助。

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。