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');