掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
WordPress自帶的上傳圖片程序最后保存的文件名是圖片的原始文件名,而且在默認(rèn)情況下,在windows服務(wù)器上是會出現(xiàn)上傳失敗的。如下圖:
解決方案
其實網(wǎng)上也有類似的解決方案,這里只是解釋一下,實現(xiàn)代碼如下:
function wg_rename_upload_file_prefilter($file){ $prefix=date("YmdHis").mt_rand(1,100); $file['name'] = $prefix.'.'.pathinfo($file['name'] , PATHINFO_EXTENSION); return $file; } add_filter('wp_handle_upload_prefilter', 'wg_rename_upload_file_prefilter');
把以上代碼加在functions.php中,也可以做成一個插件。
為什么這么做?
首先,熟悉WordPress的都知道add_filter是用于過濾過濾器中的內(nèi)容的,簡單的說就是把原先默認(rèn)的內(nèi)容給“篡改”掉,當(dāng)然是按照我們想要實現(xiàn)的意圖篡改。那么為什么就用到了wp_handle_upload_prefilter這個過濾器呢?當(dāng)然是需要一個簡單的分析過程的,分析過程如下:
①、首先從后臺添加媒體頁面可以知道WordPress上傳文件入口文件為wp-admin/media-upload.php,在里面可以看到使用do_action鉤子添加了media_upload_xxx方法。
②、進一部分追蹤我們可以發(fā)現(xiàn)調(diào)用的是wp-admin/includes/media.php中的media_handle_upload方法,在該方法中完成附件信息寫入數(shù)據(jù)庫,而上傳的文件保存過程的代碼這方法本身并沒有,而是它調(diào)用另外的一個方法(wp_handle_upload)。
③、而wp_handle_upload來自wp-admin/includes/file.php,在該方法中我們可以看到有兩個過濾器wp_handle_upload_prefilter和wp_handle_upload,前者就是可以修改來自文件全局變量的信息的,而后者則是修改返回信息的。
④、通過打印或者可以看到如下信息,其實跟全局變量類似,包含name、type、temp_name、size、error等,而name就是文件名,原始的文件名。而且后續(xù)在的操作是完全按照這個數(shù)值來進行操作的,所以我們應(yīng)該替換掉這個信息。
⑤、而在該方法中有如下代碼,就是一個過濾器,我們可以過濾$file,我們可以把$file['name']改成其他的值,比如上面就是年月日時分秒然后加上一個1-100的正整數(shù)隨機數(shù)作為新文件名,就這樣就實現(xiàn)了文件重命名。
$file = apply_filters( 'wp_handle_upload_prefilter', $file );
替換后在該方法中打印$file,就變成了下面這樣的了
以上就是開頭的解決方案的簡單分析過程,如果你只是做運營而非做技術(shù)開發(fā)的朋友,那么請忽略下面的分析過程。
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流