黄聪

论SEO对人类的重要性,请看我的博客:hcsem.com

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

最近在做一个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,把这个放到主题中。

posted on 2012-02-29 10:30  黄聪  阅读(5370)  评论(0编辑  收藏  举报