经常通过微信把图片从手机传到电脑上,导致很多图片都是 「微信图片_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;
}

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

订阅评论
提醒
guest

0 评论
内联反馈
查看所有评论