时间:2024-03-30
我是一个敬业的小本本,最近在WordPress开发中遇到了一个需求,需要将远程服务器上的图片保存到WordPress的媒体库中,实现缓存或备份的功能。经过研究,我发现实现这个功能的过程并不难,只需要下载远程服务器的图片,然后插入到媒体库中就可以了。
WordPress提供了一个非常便捷的下载文件的函数download_url($url)
,我们可以使用这个函数下载远程服务器的图片。
$tmp=download_url($url);
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
,只需要以下几行代码就能搞定。
$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媒体库中的实现方式,希望能对大家有所帮助。
Copyright © 2019-2024 java.fit