WordPress添加媒体上传图片时,我们有时会为图片选择中文名字。因为WordPress是国外的程序,对中文命名的图片不友好,所以上传后会有错误。但是有时候我们保存在桌面或者其他地方的图片都是用中文命名的。现在我们必须将它们上传到WordPress多媒体或文章中。我们做什么呢
俗话说“功夫不负有心人”,问题是我发现的。如果原编码问题是中文,那么wp的缩略图机制就无法处理,于是我的问题就产生了。
在wp-admin/includes/file.php文件中,有一段代码,其中第一行控制我们上传的图片的命名:
// Move the file to the uploads dir $new_file = $uploads[‘path’] . “/$filename”; //新上传的图片按上传时的名称显示 if ( false === @ move_uploaded_file( $file[‘tmp_name’], $new_file ) ) { if ( === strpos( $uploads[‘basedir’], ABSPATH ) ) $error_path = str_replace( ABSPATH, ”, $uploads[‘basedir’] ) . $uploads[‘subdir’]; else $error_path = basename( $uploads[‘basedir’] ) . $uploads[‘subdir’]; return $upload_error_handler( $file, sprintf( __(‘The uploaded file could not be moved to %s.’ ), $error_path ) ); }既然问题定位了,当然是赶紧解决,让画面正常显示!
处理方法汇总既然问题已经浮出水面,据一位度娘的忠实粉丝说,当然先去百度一下寻找答案。以下是百度找到的答案。
第一个是修改wp的程序文件file.php。
在file.php寻找下面的代码。
$new_file = $uploads[path] . /$filename;将上面的代码修改为
$new_file = $uploads[path] . /.date(YmdHis).floor(microtime()*)...$ext;显示结果以“年、月、日、小时、分钟+千毫秒整数”的格式命名。
这种方式有很大的弊端:首先上传的图片会全部被重命名;第二,当wp更新到新版本时,需要再次修改代码。
第二:向主题functions.php添加代码。
function wpyou_rename_upload_file_prefilter($file){ $time=date(Y-m-d); $file[name] = $time..mt_rand(,)...pathinfo($file[name] , PATHINFO_EXTENSION); return $file; } add_filter(wp_handle_upload_prefilter, wpyou_rename_upload_file_prefilter);实现效果和第一个一样,不用每次wp更新都反复修改程序文件,但缺点是上传的图片都会被重命名。
完美的解决方法如果我按照上面的方法修改,我上传的图片都会被重命名,对于我这种用云盘存储图片的用户来说是个麻烦,只能自己动手了。这里有一个完美的解决方案。上传图片时,主题会检查图片名称是否包含汉字。如果是的话,重命名的机制将被实现。如果没有,上传的名称将直接作为图片名称,下面的代码可以直接添加到主题的functions.php文件中。
通过上面的代码片段,最终完美解决了中文图片无法显示缩略图的问题。看来以后还需要研究wp程序的一些功能!今天就把这个方法写到这里,希望能帮助到和我有同样问题的朋友!
/* 中文名图片上传改名 /* ——————- */ function tin_custom_upload_name($file){ if(preg_match(‘/[一-龥]/u’,$file[‘name’])): $ext=ltrim(strrchr($file[‘name’],’.’),’.’); $file[‘name’]=preg_replace(‘#^www\.#’, ”, strtolower($_SERVER[‘SERVER_NAME’])).’_’.date(‘Y-m-d_H-i-s’).’.’.$ext; endif; return $file; } add_filter(‘wp_handle_upload_prefilter’,’tin_custom_upload_name’,,); 如果上面的不行可以试试下面的这个自用的
,感觉可以(优化版) //WordPress上传中文字体图片自动转换为域名日期时间 function tin_custom_upload_name($file){ if(preg_match('/[一-龥]/u',$file['name'])): $ext=ltrim(strrchr($file['name'],'.'),'.'); $file['name']=preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME'])).'_'.date('Y-m-d_H-i-s').'.'.$ext; endif; return $file;} add_filter('wp_handle_upload_prefilter','tin_custom_upload_name',,);
作者:徐州百都网络 | 来源: | 发布于:2022-03-20 01:08:49