创客云
更专业,更规范,更实效,更懂营销

代码实现wordpress远程图片自动本地化

  在wordpress主题中加入远程图片文件自动本地化代码,经常转载文章的朋友应该会用到这个功能。把外链图片自动保存到网站本地,防止外链图片失效造成图片不显示。
  把下面的代码添加到主题的functions.php文件或者是functions.php的引入文件中即可,以后每当在wordpress发布文章时如果文章中含有外链图片就会自动本地化了,无需任何设置操作非常方便。

add_filter('content_save_pre', 'auto_save_image');
    function auto_save_image($content) {
     $upload_path = '';
     $upload_url_path = get_bloginfo('url');
       
     //上传目录
     if (($var = get_option('upload_path')) !=''){
     $upload_path = $var;
     } else {
     $upload_path = 'wp-content/uploads';
     }
     if(get_option('uploads_use_yearmonth_folders')) {
     $upload_path .= '/'.date("Y",time()).'/'.date("m",time());
     }
       
     //文件地址
     if(($var = get_option('upload_url_path')) != '') {
     $upload_url_path = $var;
     } else {
     $upload_url_path = bloginfo('url');
     }
     if(get_option('uploads_use_yearmonth_folders')) {
     $upload_url_path .= '/'.date("Y",time()).'/'.date("m",time());
     }
       
     require_once ("../wp-includes/class-snoopy.php");
     $snoopy_Auto_Save_Image = new Snoopy;
       
     $img = array();
       
     //以文章的标题作为图片的标题
     if ( !empty( $_REQUEST['post_title'] ) )
     $post_title = wp_specialchars( stripslashes( $_REQUEST['post_title'] ));
     $text = stripslashes($content);
     if (get_magic_quotes_gpc()) $text = stripslashes($text);
     preg_match_all("/ src=(\"|\'){0,}(http:\/\/(.+?))(\"|\'|\s)/is",$text,$img);
     $img = array_unique(dhtmlspecialchars($img[2]));
     foreach ($img as $key => $value){
     set_time_limit(180); //每个图片最长允许下载时间,秒
     if(str_replace(get_bloginfo('url'),"",$value)==$value&&str_replace(get_bloginfo('home'),"",$value)==$value){
     //判断是否是本地图片,如果不是,则保存到服务器
     $fileext = substr(strrchr($value,'.'),1);
     $fileext = strtolower($fileext);
     if($fileext==""||strlen($fileext)>4)
     $fileext = "jpg";
     $savefiletype = array('jpg','gif','png','bmp');
     if (in_array($fileext, $savefiletype)){
     if($snoopy_Auto_Save_Image->fetch($value)){
     $get_file = $snoopy_Auto_Save_Image->results;
     }else{
     echo "error fetching file: ".$snoopy_Auto_Save_Image->error."<br>";
     echo "error url: ".$value;
     die();
     }
     $filetime = time();
     $filepath = "/".$upload_path;//图片保存的路径目录
     !is_dir("..".$filepath) ? mkdirs("..".$filepath) : null;
     //$filename = date("His",$filetime).random(3);
     $filename = substr($value,strrpos($value,'/'),strrpos($value,'.')-strrpos($value,'/'));
       
     //$e = '../'.$filepath.$filename.'.'.$fileext;
     //if(!is_file($e)) {
     // copy(htmlspecialchars_decode($value),$e);
     //}
     $fp = @fopen("..".$filepath.$filename.".".$fileext,"w");
     @fwrite($fp,$get_file);
     fclose($fp);
       
       
       
     $wp_filetype = wp_check_filetype( $filename.".".$fileext, false );
     $type = $wp_filetype['type'];
     $post_id = (int)$_POST['temp_ID2'];
     $title = $post_title;
     $url = $upload_url_path.$filename.".".$fileext;
     $file = $_SERVER['DOCUMENT_ROOT'].$filepath.$filename.".".$fileext;
       
     //添加数据库记录
     $attachment = array(
     'post_type' => 'attachment',
     'post_mime_type' => $type,
     'guid' => $url,
     'post_parent' => $post_id,
     'post_title' => $title,
     'post_content' => '',
     );
     $id = wp_insert_attachment($attachment, $file, $post_parent);
     $text = str_replace($value,$url,$text); //替换文章里面的图片地址
     }
     }
     }
     $content = AddSlashes($text);
     remove_filter('content_save_pre', 'auto_save_image');
     return $content;
    }
       
    function mkdirs($dir)
    {
     if(!is_dir($dir))
     {
     mkdirs(dirname($dir));
     mkdir($dir);
     }
     return ;
    }
    function dhtmlspecialchars($string) {
     if(is_array($string)) {
     foreach($string as $key => $val) {
     $string[$key] = dhtmlspecialchars($val);
     }
     }else{
     $string = str_replace('&', '&', $string);
     $string = str_replace('"', '"', $string);
     $string = str_replace('<', '<', $string);
     $string = str_replace('>', '>', $string);
     $string = preg_replace('/&(#\d;)/', '&\1', $string);
     }
     return $string;
    }
WordPress主机推荐:创客主机 | 预约汉化(承接wordpress主题|插件汉化服务!联系客服
分享到:更多 ()

评论 抢沙发

评论前必须登录!

 

本站承接WordPress等系统建站仿站、二次开发、主题模板插件定制等服务!

关于我们联系我们