保存远程服务器上的图片到 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 = "The WordPress Logo";
$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 = "The WordPress Logo";

$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');
  • 分享:
评论
还没有评论
    发表评论 说点什么