修正中文檔名上傳後檔案消失的問題

剛剛好在 WordPress 的 FB 社群上看到,有人在說上傳中文檔名的檔案消失了。

沒錯!這問題在 WordPress 當中確實很可能會發生,不過實際發生的條件是什麼沒有詳細研究,但可以肯定的是,上傳中文檔名的附件,你很可能會在媒體列表當中看到他的存在,但是你卻無法下載他或是圖片看不到內容。


這時候就需要寫一小段程式來處理了啦~

add_filter('sanitize_file_name', 'nice_sanitize_file_name');
function nice_sanitize_file_name($file_name) {
	$parts = explode('.', $file_name);
	if( preg_match('@^[a-z0-9][a-z0-9-_]*$@i', $parts[0]) ) {
		$file_name = $parts[0];
	} else {
		$file_name = substr(md5($parts[0]), 0, 10);
	}
	if( count($parts) < 2 ) {
		return $file_name;
	} else {
		$extension = array_pop($parts);
		return $file_name . '.' . $extension;
	}
}

如果你上傳的檔名是以 英文 數字 – _ 這四種類文字所組合而成的,就不修改檔名。
如果不是,就將檔名改成一個由 英文 數字 組合而成的字串,長度為 10 個字。

但是最重要的問題來了,你需要將這程式放在哪裡呢?
我自己都是用寫一個外掛的方式來處理,那如何寫一個外掛呢?
很簡單請看 【教學】讓 WP 認識你的外掛 (檔頭) 這一篇文章
至於放置在 佈景主題 的 functions.php 檔案裡面有沒有效果,我就沒嘗試過了 ( 我是懶人,不想測試 )

分類: WordPress,標籤: , , , , , 。這篇內容的永久連結