先簡單梳理一下 WordPress 后臺上傳圖片的流程是,WordPress 使用?media_handle_upload
?函數處理整個圖片上傳的過程,他的步驟是:
1. 使用?wp_handle_upload
?把圖片上傳到 WordPress 上傳目錄。
2. 然后整理好數據提交給?wp_insert_attachment
。
3.?wp_insert_attachment
?函數調用?wp_insert_post
?插入到 WordPress 的 posts 數據庫表。
4.?wp_insert_post
?把圖片信息插入到 WordPress 的 posts 數據庫表之前,會使用?wp_unique_post_slug
?函數設置唯一的 post_slug。
wp_unique_post_slug
?會到數據庫里面檢查圖片的名字是否已經有了,有了就會重命名圖片的名字,比如 1.jpg,就會被重命名為 1-2.jpg,如果 1-2.jpg 名字也有了,就會重命名為 1-3.jpg,以此類推,一直到名字唯一為止。這樣會造成上百條 SQL 請求。
我們不可能讓用戶堅持不上傳 1.jpg 這樣太常用的圖片名字,但是又要為了防止這個大量 SQL 查詢的過程,我們應該在源頭就杜絕這個問題,把圖片的名字更改了。
add_filter('wp_handle_upload_prefilter', function($file) {
if(strlen($file['name'])<=7){ $file['name'] = time().'-'.$file['name']; } return $file; });
這段代碼就是如果圖片的名字(包括 .jpg 后綴名)超過7個字符,就在圖片名字前面加上一個時間戳,這樣再重復檢查的概率可以認為是沒有了。
來源于:https://blog.wpjam.com/m/add-timestamp-2-image-filename/