最近在做一個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,把這個放到主題中。