WordPress上传图片或附件自动重命名的实现方法

日期:2015年11月20日 作者: 分类:编程 浏览:5659

在使用wordpress发布文章时,经常用到的一个功能就是添加媒体,比如在文章中添加图片或其他格式的附件。那么,问题来了,wordpress在英语环境中使用,文件名一般都是英文,但是对于中文用户来说,经常会碰到文件名是中文的情况。尽管直接上传一个中文名的文件到网站上是没有问题的,但是我们更希望这个文件能在我们上传的时候自动变成英文或数字。

本文将会介绍两个格式的文件命名方法:根据上传的时间命名,如20140101112233.xxx(表示2014年1月1日11时22分33秒上传的,xxx表示文件类型后缀);另一种是将文件名通过md5转码后得到的一个32位字符串,如21232f297a57a5a743894a0e4a801fc3.xxx(原始文件名为admin.xxx)。在自定义的wordpress主题或官方自带的主题中都可以使用这个方法来实现上传文件重命名。

原理

wordpress之所以强大就是因为它给开发者提供了一系列API,使其变得非常灵活。wordpress有一个Filter Functions(过滤器函数):add_filter,使用这个函数来操作wp_handle_upload_prefilter就能实现重命名的功能。

wp_handle_upload_prefilter可以参看wordpress官方文档的说明:

根据上传时间重命名文件

通常情况下,我们每次上传文件的时间都是不同的,即使是批量上传的情况下,也几乎不会出现同一时刻上传了多张图片文件的情况。所以这个方法几乎不会出现重名的文件。

这里需要用到php中的date()函数,完整的代码如下:

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;
}

将这段代码加到当前使用主题的functions.php文件中。

使用md5转码文件名

php有个md5()函数,具体的用法可以参考php官方文档,这里不作解释。代码如下:

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;
}

使用md5转码后原始文件名将会变成一段32位字符。

本文转自:http://fegeek.com/75

标签:

除非注明,戊辰人博客文章均为原创,转载请以链接形式标明本文地址

本文地址:https://wanglu.info/2015/11/1102.html