最新公告
  • 欢迎您光临梦幻资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • WordPress文章外链图片批量本地化

    WordPress文章外链图片批量本地化

    正文概述 梦幻   2020-11-30   53

    免费的往往都是贵的,现在很的免费图床都下线了,但是如何批量将WordPress章外链图片本地化,摆在了众多使用免费图床用户面前,经多查找测试,将最终解决办法,分享给大家。

    WordPress文章外链图片批量本地化

    代码版:(直接将下面的代码,添加到当前主题函数板 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, false);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, 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, $arr[1], $wp_upload_dir['path'], $file_name, '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, $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));
    }
    return $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);
    }
    }
    default:
    return $file;
    }
    }

    function ecp_image_convert($from='webp', $to='jpeg', $image) {
    $im = imagecreatefromwebp($image);
    if (imagejpeg($im, str_replace('webp', 'jpeg', $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', 'jpeg', $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后台,文章→所有文章,进入文章管理页面,勾选标题”全选当前页面的所有文章,并选择“编辑”,并点击“应用”按钮。

    WordPress文章外链图片批量本地化

    ,不要更改批量编辑中的任何设置,只需单击 “更新”即可。

    这个过程将触发检查所有选定的文章,并导入外链图片。

    默认每页只显示20篇文章,如果你的文章较多,并想一次性处理更多的文章,可以打右上角的“显示选项”,将“每页的项目数”调整为9999,当然要视你的主机配置适当调整文章数量,一次性处理太多文章,会让主机瞬间资源耗尽,造成宕机。

     

    1.有任何问题请登陆用户中心后提交工单反馈: 登陆用户中心
  • 2.请在右上角点击下载链接下载资源,如果下载文件夹下有“解压密码”的文本,以此为准,如果没有的话,压缩包就是没有密码或者密码是默认的wajzw.cn;
  • 3.本站所有资源仅用于学习及研究使用,请必须在24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担。资源除标明原创外均来自网络转载,版权归原作者或本站特约原创作者所有,如侵犯到您权益请联系本站删除!
  • 4.本站站内提供的所有可下载资源(软件等等)本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发);但本网站不能保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug;同时本站用户必须明白,【梦幻资源网】对提供下载的软件等不拥有任何权利(本站原创和特约原创作者除外),其版权归该资源的合法拥有者所有。
  • 5.本站所有资源均不提供相关技术服务,如果源码下载地址失效请 联系站长QQ进行补发。

  • 梦幻资源网 » WordPress文章外链图片批量本地化
  • 常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    梦幻资源网
    一个高级程序员模板开发平台

    Leave a Reply

    售后服务:

    • 售后服务范围 1、商业模板使用范围内问题免费咨询
      2、源码安装、模板安装(一般 ¥50-300)服务答疑仅限SVIP用户
      3、单价超过200元的模板免费一次安装,需提供服务器信息。
      付费增值服务 1、提供dedecms模板、WordPress主题、discuz模板优化等服务请详询在线客服
      2、承接 WordPress、DedeCMS、Discuz 等系统建站、仿站、开发、定制等服务
      3、服务器环境配置(一般 ¥50-300)
      4、网站中毒处理(需额外付费,500元/次/质保三个月)
      售后服务时间 周一至周日(法定节假日除外) 9:00-23:00
      免责声明 本站所提供的模板(主题/插件)等资源仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,有部分资源为网上收集或仿制而来,若模板侵犯了您的合法权益,请来信通知我们(Email: 185599521@qq.com),我们会及时删除,给您带来的不便,我们深表歉意!

    Hi, 如果你对这款模板有疑问,可以跟我联系哦!

    联系作者
    • 442会员总数(位)
    • 5014资源总数(个)
    • 2本周发布(个)
    • 0 今日发布(个)
    • 335稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情
    升级SVIP尊享更多特权立即升级