WordPress增加媒体中文名称,图片上传和重命名(优化版)

当前位置: 首页 > 常见问题

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