最新公告
  • 欢迎您光临依米网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • wordpress文章外链图片本地化教程(亲测可用)

    个人站长经营一个网站是非常辛苦的事情,很多时候我们都是复制了别的网站还不错的文章进行伪原创。但是,外链的图片如果我们一个一个下载再上传到自己的网站是一个非常耗费体力的活。如果直接使用别人网站的外链图片又会面临被防盗链而打不开的风险。因此站长可能需要一种便捷的工具或者方法来处理外链图片本地化

    WordPress很多插件或者代码都可以实现在编辑文章中自动将外链图片下载到本地,最终我选择了一个叫:Easy Copy Paste的插件。请自行到wordpress后台搜索安装。

    但是如果插件安装的多了难免会出现网站加载速度下降的现象,所以很多站长希望通过代码来实现外链图片本地化。网上盛传了一段109行的代码。但是,很多站长都是闷头复制粘贴,根本没有测试过。很负责任的告诉大家,这段代码无效。

    就是下面这段代码(注意:这是无效代码):

    正确外链本地化代码(亲测有效):

    直接将下面的代码,添加到当前主题函数模板 functions.php 中

    //外链图片本地化 开始20210807
    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);
    

    以上代码取自Easy Copy Paste插件

    完成上述操作之后,编辑文章只需要点击更新按钮,就可以将文章中的外链图片下载到本地并替换链接。

    到后台所有文章列表批量更新文章也可以把历史文章的外链图片本地化。

    依米资源网是一个免费资源平台。本站所有资源均来自于互联网,版权归原作者所有,请于下载24小时之内删除,请勿商用,支持正版。
    依米资源网 » wordpress文章外链图片本地化教程(亲测可用)

    常见问题FAQ

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

    发表评论

    • 187会员总数(位)
    • 771资源总数(个)
    • 57本周发布(个)
    • 4 今日发布(个)
    • 537稳定运行(天)

    共建共享免费资源网

    加入我们 投稿赚钱
    升级SVIP尊享更多特权立即升级
    /** **/
    this is a cache: 0.00237