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

新浪博客已正式公布“相册”功效下线,时间是 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,固然要视你的主机配置适当调解文章数目,一次性处置惩罚太多文章,会让主机刹时资源耗绝,形成宕机。

提醒:操作前请提前做好数据库备份,以防万一,祝各人图片逃亡乐成!

以上是搬码源码网(abnma.com)为你网络收拾整顿的全数代码内容,但愿文章可以或许帮你解决所碰到的步伐开提问题。假如感觉搬码源码网网站内容还不错,接待将搬码源码网网站保举给步伐员挚友。

0
分享到:
搬码资源网广告位

评论0

请先

没有账号? 忘记密码?