WordPress上传图片文件后自动重命名的两种方法

WordPress上传图片为什么需要重命名?

使用过国内的CMS的小伙伴们一定搞不懂,为什么WordPress的图片上传后不会重命名,其实这是为了能够更好的个性化管理好自己的上传素材,不过遇上中文就比较麻烦一点,因为程序会因为个别服务器的配置环境原因,对中文路径和中文图片名称的解析能力是非常差的,在个别的路径和文章打开时会出现无法显示的情况,所以我们可以用这个简单的代码操作方法来实现上传图片后的自动重命名,让他图片或是文件自动生成一个随机的文件编号,这样就不会出现中文图片文件无法显示的问题了。

如何让 WordPress 图片重命名?

现在,就和大家说说更加接地气一点的 WordPress 技巧。让图片上传以后,文件能在我们上传的时候自动变成英文或数字。

选择一下任意一段代码放置在主题的 functions.php 文件中即可:

图片自动重命名方法一:时间格式命名

  1. //根据上传时间重命名文件
  2. add_filter('wp_handle_upload_prefilter', 'custom_upload_filter' );
  3. function custom_upload_filter( $file ){
  4. 	$info = pathinfo($file['name']);
  5. 	$ext = $info['extension'];
  6. 	$filedate = date('YmdHis').rand(10,99);//为了避免时间重复,再加一段2位的随机数
  7. 	$file['name'] = $filedate.'.'.$ext;
  8.     return $file;
  9. }

图片自动重命名方法二:md5命名

  1. //使用md5转码文件名
  2. add_filter('wp_handle_upload_prefilter', 'custom_upload_filter' );
  3. function custom_upload_filter( $file ){
  4. 	$info = pathinfo($file['name']);
  5. 	$ext = '.' . $info['extension'];
  6. 	$md5 = md5($file['name']);
  7.     $file['name'] = $md5.$ext;
  8.     return $file;
  9. }

补充说明:

以上代码可以实现文件名称在上传过程中自动重命名,新的名称规则是由系统自动生成的一个32位的MD5加密文件名,由于默认生成的32位文件名有点长,所以使用substr(md5($name), 0, 20) 截断将其设置为20位,如果你希望文件重命名短一点那么请使用下面的代码。

  1. function rename_filename($filename) {
  2. 	$info = pathinfo($filename);
  3. 	$ext = empty($info['extension']) ? '' : '.' . $info['extension'];
  4. 	$name = basename($filename, $ext);
  5. 	return substr(md5($name), 0, 20) . $ext;
  6. }
  7. add_filter('sanitize_file_name', 'rename_filename', 10);
喜欢