hkt1998

hkt1998

WordPress上传图片自动重命名

2023-06-22

经常通过微信把图片从手机传到电脑上,导致很多图片都是“微信图片_XXX”这种形式的文件名,在URL中不美观。所以希望给博客添加自动重命名上传文件的功能。

以前使用过的WPJAM插件有这个功能,但该插件的其它功能我都不需要,所以没考虑它。最后选择用目前正在使用的code snippet插件,通过添加一段代码来实现。

文件名需要尽量简短,不要出现中文和特殊字符,所以选择了计算MD5值作为文件名。如果对图片内容计算MD5,上传两次同一张图片会出现同名情况。仅对文件名计算MD5也是一样的。也考虑过计算MD5值然后在后面加上时间戳,但这样拼接出来的文件名有点长。

最后选择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,这样重名几乎就不可能了
    $md5 = md5($file['name'].date('YmdHis'));
    $file['name'] = $md5.$ext;
    return $file;
}

也想过把原来上传的图片也给重命名了,但有点复杂,需要动数据库,遂放弃这个想法。