WordPress添加媒體上傳圖片時,我們有時會為圖片選擇中文名字。因為WordPress是國外的程序,對中文命名的圖片不友好,所以上傳后會有錯誤。但是有時候我們保存在桌面或者其他地方的圖片都是用中文命名的?,F在我們必須將它們上傳到WordPress多媒體或文章中。我們做什么呢
俗話說“功夫不負有心人”,問題是我發(fā)現的。如果原編碼問題是中文,那么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’,,); 如果上面的不行可以試試下面的這個自用的
,感覺可以(優(yōu)化版) //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',,);
作者:徐州百都網絡 | 來源: | 發(fā)布于:2022-03-20 01:08:49