最近在做一个WP多站点,由于国人很少有在上传图片前将图片名重命名为英语的,所以自动重命名对于WP来说尤为重要,特别是LINUX的不支持中文名的。
先直接给出解决方案,打开\wp-admin\includes\里面的file.php,至306行,可以看到代码$file['name'] = $proper_filename;,将它删除,并且改为:
$time=date(“m-d-H-i-s”);$type_change = array(‘image’=>’.');$file_type = strtr($file['type'],$type_change);
$file['name'] = $time.”".mt_rand(1,100).”".$file_type ;
保存下,上传多媒体后文件就自动重命名为2011-12-12-1253203格式,年份-月份-日期-时间和随机数字。
下面是具体的解决思路:
首先看一下一般的PHP上传照片的思路,确认类型=》多媒体重命名=》把文件上传到指定目录,成功上传后输出上传图片的预览用到的函数。
WordPress之所以不能显示中文的多媒体问题出在第二步,缺少相应的重命名重命名。我们的思路就是在Wordpress原有的上传步骤中添加一步重命名的,这里是重命名为上传时间+随机数字。
WordPress上传多媒体的代码都存放于\wp-admin\includes\里面的file.php,打开这个文件,在304行之前(包括 304行)基本都是在对文件进行检验,305行“ // Check to see if wp_check_filetype_and_ext() determined the filename was incorrect”之后开始进入正题。
305,306行的代码如下:
if ( $proper_filename )
$file['name'] = $proper_filename;
324行的代码如下:
$filename = wp_unique_filename( $uploads['path'], $file['name'], $unique_filename_callback );
$filename的作用就是最后多媒体的文件的地址,$file['name']就是多媒体的名称,第305、306行的代码决定了最后的文件名,所以只需要在306行的代码作手脚就可以了。只需要将$file['name']赋予你想要的一个名称。
然后我们用到的是读取时间作为标题,为了各种万一起见,使用mt_rand(1,100)生成从1到100中随机数字组成新的文件名。然后通 过$file_type = strtr($file['type'],$type_change);获取图片的类型,PNG,或者GIF之类。到此,一切OK~
明天看下Wordpress的HACK,把这个放到主题中。
出处:http://www.cnblogs.com/huangcong/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。