wordpress远程图片文件自动本地化

本文介绍了一段代码,用于在WordPress中自动将远程图片本地化,解决图片不稳定的问题。只需将代码添加到主题的functions.php文件中,即可在发布文章时自动完成图片本地化。

摘要: 使用过百度ueditor编辑器插件的小伙伴一定会发现,ueditor编辑器会自动把外链的原创图片抓取到本地,并且使用本地的图片链接来显示在网站上,这个对于很多怕外链图片不稳定又不愿意自己下载上传图片的小伙伴来说简直就是神器~,可是呢不使用ueditor小伙伴就...

使用过百度ueditor编辑器插件的小伙伴一定会发现,ueditor编辑器会自动把外链的原创图片抓取到本地,并且使用本地的图片链接来显示在网站上,这个对于很多怕外链图片不稳定又不愿意自己下载上传图片的小伙伴来说简直就是神器~,可是呢不使用ueditor小伙伴就享受不到这个神器般的功能,正好在某老外博客看到一篇远程图片自动本地化的代码小V这就立即分享给大家,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
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 ;
}

将次代码写入主题的functions.php文件或者是functions.php的引入文件中即可,以后每当在wordpress发布文章时如果文章中含有外链图片就会自动本地化了,无需任何设置操作非常方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值