wordpress附件上传重命名

说到附件上传重命名这个问题,可能很多人不太在乎,其实以前我也不太在乎这个事情,但是直到有一天我发现水煮鱼博客有这么一个解释(点击查看水煮鱼原文),他说道“ 新图片上传会到数据库里面检查图片的名字是否已经有了,有了就会重命名图片的名字,比如 1.jpg,就会被重命名为 1-2.jpg,如果 1-2.jpg 名字也有了,就会重命名为 1-3.jpg,以此类推,一直到名字唯一为止。这样会造成上百条 SQL 请求 ”。

想想确实是这么一回事,因此我们很有必要给上传的附件进行重命名,且最好的效果是保证新附件的名字是唯一值,对于附件重命名这个功能在很多的主题或者插件(比如水煮鱼的wpjam插件)是已经集成了的,但也有很多主题是没有这个功能的,而且仅仅是为了一个附件重命名就去安装新插件我是不太认同的,所以在此我给大家分享下如何对上传的附件进行重命名,我们直接上代码,把代码放入主题 functions.php 文件即可 。

//使用md5对附件重命名
add_filter('wp_handle_upload_prefilter', 'custom_upload_filter' );
function custom_upload_filter( $file ){
    $info = pathinfo($file['name']);
    $ext = '.' . $info['extension'];
    $filedate = md5($file['name']);
    $file['name'] = $filedate.$ext;
    return $file;
}

以上代码是把上传的附件原名称转化为md5

//把附件名修改为上传时间
add_filter('wp_handle_upload_prefilter', 'custom_upload_filter' );
function custom_upload_filter( $file ){
    $info = pathinfo($file['name']);
    $ext = $info['extension'];
    $filedate = date('YmdHis');
    $file['name'] = $filedate.'.'.$ext;
    return $file;
}

这段代码会把附件上传的时间用作附件名,同时为了避免由于并发产生的时间相同问题,我们可以把第6行修改一下,尽量规避重名的问题。

$filedate = date('YmdHis').rand(0,99);

在时间后面加上一个0到99的随机整数作为后缀,这样可以大大降低重名问题,或者看下面

$filedate = date('YmdHis').rand(0,99).$file['name'];
$filedate = md5($filedate);

在上传时间后面接上随机整数和附件原名,然后在转成md5,同一时间上传的同名附件以及随机到同一个整数这种概率应该非常的低了吧,不然你真的可以去买彩票了,同时上面两段代码也是为了让你做一个更加直观的对比,除了第6行不一样其他地方都是一样的写法,你要是不满意上面防止重名的写法,也可以扩展你自己想要的方法进去。

写在最后:有愿意的伙伴可以扫个码或者微信搜一下公众号“思崖墨言”关注我的个人订阅号,语至告辞/抱拳。