WordPress据悉,新浪博客已经正式宣布“相册”功能下线。截止2019年7月31日24: 00,又一顿免费午餐没了。
如何把新浪相册里的图片下载到本地,替换掉原来的链接,摆在很多使用新浪免费照片床的用户面前,包括我。经过多方寻找和测试,我将与你分享我的最终解决方案。
很多WordPress的插件或者代码在编辑文章的时候可以自动将外部图片下载到本地。最后,我选择了一个叫易复制粘贴的插件。
插件下载
提取代码:khc5
也可以直接将下面的代码添加到当前的主题函数模板functions.php中:
函数ecp_save_post($post_id,$ post){ global $ wpdb;if($ post ->;post _ status = = ‘ publish ‘){ $ p = ‘/& lt;img。*[s]src = & # 091;”|’](.*)[”|’].* & gt/iU ‘;$num = preg_match_all($p,$ post -& gt;post_content,$ matches);if($ num){ $ WP _ upload _ dir = WP _ upload _ dir();set _ time _ limit(0);$ ch = curl _ init();curl_setopt($ch,CURLOPT_HEADER,false);curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);curl_setopt($ch,CURLOPT_MAXREDIRS,20);curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,30);$ ecp _ options = $ _ SERVER & # 091HTTP _ HOST ‘];foreach($ matches & # 091;1]as $ src){ if(isset($ src)& amp;& ampstrpos($src,$ ECP _ options)= = false){ $ file _ info = WP _ check _ filetype(basename($ src),null);if($file _ info & # 091;ext ‘]= = false){ date _ default _ time zone _ set(‘ PRC ‘);$file_name = date(‘YmdHis-‘)。dechex(mt_rand(100000,999999))。。tmp ‘;} else { $ file _ name = dechex(mt _ rand(100000,999999))。’-‘ .basename($ src);} curl_setopt($ch,CURLOPT_URL,$ src);$ file _ path = $ WP _ upload _ dir & # 091;路径’]。’/’ .$ file _ name$img = fopen($file_path,’ WB ‘);curl_setopt($ch,CURLOPT_FILE,$ img);$ img _ data = curl _ exec($ ch);fclose($ img);if(文件存在($文件路径)& amp& amp文件大小($file_path)>0) { $t = curl_getinfo($ch,curl info _ CONTENT _ TYPE);$arr = explode(‘/’,$ t);if (pathinfo($file_path,path info _ EXTENSION)= = ‘ tmp ‘){ $ file _ path = ECP _ handle _ ext($ file _ path,$ arr & # 0911],$ wp _ upload _ dir & # 091path’],$file_name,’ tmp ‘);} elseif (pathinfo($file_path,PATHINFO _ EXTENSION)= ‘ webp ‘ { $ file _ path = ECP _ handle _ ext($ file _ path,$ arr & # 0911],$ wp _ upload _ dir & # 091path’],$file_name,’ webp ‘);} $ post -& gt;post_content = str_replace($src,$ wp _ upload _ dir & # 091网址’]。’/’ .basename($file_path),$ post -& gt;post _ content);$ attachment = ECP _ get _ attachment _ post(basename($ file _ path),$ wp _ upload _ dir & # 091网址’]。’/’ .basename($ file _ path));$ attach _ id = WP _ insert _ attachment($ attachment,ltrim($ WP _ upload _ dir & # 091;subdir’]。’/’ .basename($file_path),’/’),0);$ attach _ data = WP _ generate _ attachment _ metadata($ attach _ id,$ file _ path);$ ss = WP _ update _ attachment _ metadata($ attach _ id,$ attach _ data);} } } curl _ close($ ch);$ wpdb -& gt;更新($ wpdb -& gt;文章,数组(‘ post _ content ‘ = & gt$ post ->;post_content)、数组(‘ ID ‘ = & gt$ post ->;ID));} } }函数ecp_handle_ext($file,$type,$file_dir,$file_name,$ ext){ switch($ ext){ case ‘ tmp ‘:if(rename($ file,str_replace(‘tmp ‘,$type,$ file)){ if(‘ webp ‘ = = $ type){ return ECP _ image _ convert(‘ webp ‘,’ jpeg ‘,$file_dir)。’/’ .str_replace(‘tmp ‘,$type,$ file _ name));}返回$file_dir。’/’ .str_replace(‘tmp ‘,$type,$ file _ name);} case ‘ webp ‘:if(‘ webp ‘ = = $ type){ return ECP _ image _ convert(‘ webp ‘,’ jpeg ‘,$ file);} else { if (rename($file,str_replace(‘webp ‘,$type,$ file)){ return $ file _ dir。’/’ .str_replace(‘webp ‘,$type,$ file _ name);} }默认:返回$ file} }函数ecp_image_convert($from=’webp ‘,$to=’jpeg ‘,$ image){ $ im = imagecreatefromwebp($ image);if (imagejpeg($im,str_replace(‘webp ‘,’ jpeg ‘,$image),100)){ try { unlink($ image);} catch(异常$e) { $error_msg = sprintf(‘删除本地文件%s时出错:%s ‘,$image,$ E-& gt;getMessage());error _ log($ error _ msg);} } image destroy($ im);返回str_replace(‘webp ‘,’ jpeg ‘,$ image);}函数ECP _ get _ attachment _ post($ filename,$ URL){ $ file _ info = WP _ check _ filetype($ filename,null);返回数组(‘ guid ‘ = & gt$url,’ post _ type ‘ = & gtattachement ‘,’ post _ mime _ type ‘ = & gt$ file _ info & # 091type’],’ post _ title ‘ = & gtpreg_replace(‘/。[。]+$/’,”,$filename),’ post _ content ‘ = & gt’,’ post _ status ‘ = & gt继承’);} add_action(‘save_post ‘,’ ecp_save_post ‘,120,2);代码取自上面的插件。
单次操作后,只需要点击更新按钮编辑文章,就可以将文章中的外链图片下载到本地,替换链接。
但是,逐条编辑文章不仅繁琐而且工作量很大。这里教你一个小技巧,你可以批量下载文章里的图片。
插件代码的批量操作不仅可以在正常编辑页面点击更新按钮触发下载功能,还可以在后台所有文章列表页面触发下载功能。原理明白,操作简单。
进入WP后台,文章→所有文章,进入文章管理页面,勾选“标题”选择当前页面所有文章,选择“编辑”点击“应用”按钮。
记住,批量编辑时不要更改任何设置,只需点击“更新”即可。
此过程将触发检查所有选定的文章和导入外部链接图片。
默认情况下,每页只显示20篇文章。如果你的文章比较多,想一次处理更多的文章,可以打开右上角的“显示选项”,将“每页项数”调整为9999。当然文章数量要根据你的主机配置来调整。一次处理太多物品会让主机耗尽资源,造成停机。
注意:开始主题用户需要在操作前进入主题选项→辅助功能,勾选“仅临时使用文章进行快速编辑和常规发布,防止文章选项丢失”,否则批量更新后,之前勾选的文章设置和手动添加的缩略图将失效,请切记!
提示:操作前请提前备份好数据库,以防万一,祝大家逃生成功!
还有一个插件可以自动下载外部图片:自动上传图片。
但是插件替换原图的时候,图片的命名和链接都有问题。也可以测试一下。免费床位推荐
不怕再次逃离画面的朋友可以看看下面的免费图片床。
免费的床,国外不稳定,随时会被河蟹,国内不安全,随时会跑掉,保重!
https://imgchr.com/
https://sm.ms/
http://www.imagebam.com/
http://tinypic.com/
https://www.poco.cn/
https://www.fotki.com/
http://upload.geminight.com/
https://x.yupoo.com/
http://www.imageshack.us/
https://imgchr.com/
https://ddd.dog/
http://jpgbox.com/