WordPress 批量将文章中的外链图片导入到本地

WordPress 批量将文章中的外链图片导入到本地,第1张

概述据报,新浪博客已正式宣布“相册”功能下线,最后期限是2019年7月31日24时,又一个免费的午餐没了。如何把放在新浪相册的图片下载到本地并替换原来的链接,摆

下面是内存溢出 jb51.cc 通过网络收集整理的代码片段。内存溢出小编现在分享给大家,也给大家做个参考。

据报,新浪博客已正式宣布“相册”功能下线,最后期限是 2019 年 7 月 31 日 24 时,又一个免费的午餐没了。如何把放在新浪相册的图片下载到本地并替换原来的链接,摆在了众多使用新浪免费图床用户面前,当然也包括我。经多方查找测试,将本人最终解决办法,分享给大家。wordpress 很多插件或者代码都可以实现在编辑文章中自动将外链图片下载到本地,最终我选择了一个叫:Easy copy Paste的插件。

代码实现

也可以直接将下面的代码,添加到当前主题函数模板 functions.PHP 中:

function ecp_save_post($post_ID,$post) {

global $wpdb;

if($post->post_status == 'publish') {

$p = '/<img.*[s]src=["|'](.*)["|'].*>/iU';

$num = preg_match_all($p,$post->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,CURLOPT_FolLOWLOCATION,CURLOPT_MAXREDirs,20);

curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,30);

 

$ecp_options = $_SERVER['http_HOST'];

foreach ($matches[1] as $src) {

if (isset($src) && strpos($src,$ecp_options) === false) {

$file_info = wp_check_filetype(basename($src),null);

if ($file_info['ext'] == false) {

date_default_timezone_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['path'] . '/' . $file_name;

$img = fopen($file_path,'wb');

curl_setopt($ch,CURLOPT_file,$img);

$img_data = curl_exec($ch);

fclose($img);

 

if (file_exists($file_path) && filesize($file_path) > 0) {

$t = curl_getinfo($ch,CURliNFO_CONTENT_TYPE);

$arr = explode('/',$t);

if (pathinfo($file_path,PATHINFO_EXTENSION) == 'tmp') {

$file_path = ecp_handle_ext($file_path,$arr[1],$wp_upload_dir['path'],$file_name,'tmp');

} elseif (pathinfo($file_path,PATHINFO_EXTENSION) == 'webp') {

$file_path = ecp_handle_ext($file_path,'webp');

}

$post->post_content = str_replace($src,$wp_upload_dir['url'] . '/' . basename($file_path),$post->post_content);

$attachment = ecp_get_attachment_post(basename($file_path),$wp_upload_dir['url'] . '/' . basename($file_path));

$attach_ID = wp_insert_attachment($attachment,ltrim($wp_upload_dir['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->update( $wpdb->posts,array('post_content' => $post->post_content),array('ID' => $post->ID));

}

}

}

 

function ecp_handle_ext($file,$type,$file_dir,$ext) {

switch ($ext) {

case 'tmp':

if (rename($file,str_replace('tmp',$file))) {

if ('webp' == $type) {

return ecp_image_convert('webp','jpeg',$file_dir . '/' . str_replace('tmp',$file_name));

}

return $file_dir . '/' . str_replace('tmp',$file_name);

}

case 'webp':

if ('webp' == $type) {

return ecp_image_convert('webp',$file);

} else {

if (rename($file,str_replace('webp',$file))) {

return $file_dir . '/' . str_replace('webp',$file_name);

}

}

default:

return $file;

}

}

 

function ecp_image_convert($from='webp',$to='jpeg',$image) {

$im = imagecreatefromwebp($image);

if (imagejpeg($im,$image),100)) {

try {

unlink($image);

} catch (Exception $e) {

$error_msg = sprintf('Error removing local file %s: %s',$image,

$e->getMessage());

error_log($error_msg);

}

}

imagedestroy($im);

 

return str_replace('webp',$image);

}

 

function ecp_get_attachment_post($filename,$url) {

$file_info = wp_check_filetype($filename,null);

return array(

'guID' => $url,

'post_type' => 'attachement',

'post_mime_type' => $file_info['type'],

'post_Title' => preg_replace('/.[^.]+$/','',$filename),

'post_content' => '',

'post_status' => 'inherit'

);

}

add_action('save_post','ecp_save_post',120,2);

单篇 *** 作

之后,编辑文章只需要点击更新按钮,就可以将文章中的外链图片下载到本地并替换链接。不过逐个编辑文章不仅繁琐而且工作量不小,这里教大家一个小技巧,可以批量下载文章中的外链图片。该插件的代码不仅可以在正常的编辑页面点击更新按钮触发下载功能,而且可以在后台所有文章列表页面中触发下载图片功能,原理明白了, *** 作就简单了。

批量 *** 作

进入 WP 后台,文章→所有文章,进入文章管理页面,勾选“标题”全选当前页面的所有文章,并选择“编辑”,并点击“应用”按钮。



切记,不要更改批量编辑中的任何设置,只需单击 “更新”即可。这个过程将触发检查所有选定的文章,并导入外链图片。默认每页只显示 20 篇文章,如果你的文章较多,并想一次性处理更多的文章,可以打开右上角的“显示选项”,将“每页的项目数”调整为 9999,当然要视你的主机配置适当调整文章数量,一次性处理太多文章,会让主机瞬间资源耗尽,造成宕机。


提示: *** 作前请提前做好数据库备份,以防万一,祝大家图片逃亡成功!

以上是内存溢出(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

总结

以上是内存溢出为你收集整理的WordPress 批量将文章中的外链图片导入到本地全部内容,希望文章能够帮你解决WordPress 批量将文章中的外链图片导入到本地所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/1006750.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存