WordPress上傳中文名圖片自動重新命名二次開發

來源:互聯網
上載者:User

這幾天用Wordpress搭建了一個圖片站,在填充內容時遇到一個問題當我在媒體庫中上傳圖片時有些圖片可以正常顯示,但是個別圖片就是顯示不出來縮圖,這個問題著實讓我糾結了一下午。沒辦法尋找原因少不了研究代碼,默默的戴上眼鏡勤奮工作吧!

圖片不顯示的原因

俗話說:“功夫不負苦心人呢”,問題還是被我給發現了,原來編碼的問題如果我們上傳的圖片名稱是中文的那麼wp的縮圖機制處理不了於是就出現了我這樣的問題。

在wp-admin/includes/file.php檔案中有這麼一段代碼其中第2行控制著我們上傳圖片的命名:

// Move the file to the uploads dir
$new_file = $uploads[‘path’] . “/$filename”;  //新上傳的圖片按上傳時的名稱顯示
if ( false === @ move_uploaded_file( $file[‘tmp_name’], $new_file ) ) {
if ( 0 === 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 ) );
}

既然定位到了問題所在當然就是趕緊解決掉好讓圖片正常顯示了!

處理方法匯總
問題既然浮出了水面,按照一個度娘的忠實粉絲當然是先上百度去找答案,下面是百度尋找到的3種答案。

第一種:修改wp的程式檔案file.php

在file.php中尋找下面這段代碼

$new_file = $uploads['path'] . "/$filename";

把上述代碼修改成

$new_file = $uploads['path'] . "/".date("YmdHis").floor(microtime()*1000).".".$ext;

顯示的結果是以“年月日時分秒+千位毫秒整數”這樣的格式命名的。

這 種方法弊端很大:第一上傳的圖片全部都會重新命名;第二wp更新到新版本還要重新修改代碼。

第二種:在主題functions.php中添加代碼

function wpyou_rename_upload_file_prefilter($file){
$time=date("Y-m-d");
$file['name'] = $time."".mt_rand(1,100).".".pathinfo($file['name'] , PATHINFO_EXTENSION);
return $file;
}
add_filter('wp_handle_upload_prefilter', 'wpyou_rename_upload_file_prefilter');

實現的效果和第一種的結果是一樣的,這樣每次更新wp都不用再反覆修改程式檔案了,但是弊端還是有就是上傳的圖片全部都會重新命名。

完美的解決方案

如果按照上面的方法修改的話我上傳的圖片都要被重新命名對於我這種用雲端硬碟來儲存圖片的使用者來說是個麻煩,於是只能自己動手了。下面給出一種完美的解決方案,當你上傳圖片時,主題會檢測圖片名中是否包含中文字元,如果包含就執行重新命名的機制,如果不包含那麼直接用上傳的名稱作為圖片名,直接添加下面這段代碼到主題的functions.php檔案中即可。


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',5,1);

通過上面的程式碼片段中文圖片不能顯示縮圖的問題終於完美解決了。看來以後還是要研究一下wp程式的一些功能呀!今天把這種方法寫到這裡希望可以協助到遇到跟我一樣問題的朋友!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.