WordPress 上传文件默认是不会自动重命名的,这样就会遇到当文件名包含中文或特殊字符时有可能会产生乱码或其他各种问题。
所以,本文给出了两段自动重命名的代码,当我们在 WordPress 上传文件时会自动把文件重命名,代码如下:
第一种方法,根据上传日期时间值重命名文件
//根据上传日期时间值重命名文件
add_filter('wp_handle_upload_prefilter', 'custom_upload_filter' );
function custom_upload_filter( $file ){
$info = pathinfo($file['name']);
$ext = $info['extension'];
$filedate = date('YmdHis').rand(10,99);//为了避免时间重复,再加一段2位的随机数
$file['name'] = $filedate.'.'.$ext;
return $file;
}
第二种方法,根据上传文件md5值重命名文件
//根据上传文件md5值重命名文件
add_filter('wp_handle_upload_prefilter', 'custom_upload_filter' );
function custom_upload_filter( $file ){
$info = pathinfo($file['name']);
$ext = '.' . $info['extension'];
$md5 = md5($file['name']);
$file['name'] = $md5.$ext;
return $file;
}
网上主流的重命名方法基本都是基于上面这两段代码实现的,我个人比较偏向第一种根据日期时间重命名的方法,但是第一种方法获取到的时区时间跟 WordPress 系统时区时间总是有偏差,所以我改进了第一种方法的代码。下面给出改进版代码可以正确的根据当前系统时区时间,改进代码如下:
//根据上传日期时间值重命名文件(增强改进版)
add_filter('wp_handle_upload_prefilter', 'custom_upload_filter' );
function custom_upload_filter( $file ){
$info = pathinfo($file['name']);
$ext = $info['extension'];
$tzs = get_option('timezone_string');
$tzobj = timezone_open($tzs);
$now = date_create('now',$tzobj );
$filedate = date_format($now, 'YmdHis').mt_rand(100,999);
$file['name'] = $filedate.'.'.$ext;
return $file;
}
使用方法:把上面的代码加入你的主题 functions.php 文件即可。或者可以在 WordPress 后台搜索安装 Code Snippets 插件,添加上面的代码片段。