wordpress自动重命名上传文件名

2019年4月30日12:09:10 5 1,936 views

使用wordpress的人可能都知道,wordpress是可支持文件中文的,可是在有时候在为了一些特殊功能时候,需要文件或者图片为非英文的,如果是文件很多,那一个一个的修改起来那不是很累吗,直接为所有上传图片重新命名为非中文的。

一、根据上传的时间命名

1、举例说明:如2017031610182866.xxx,表示2017年3月16日10时18分28秒上传的,最后两位数字66是10到99之间的随机数,xxx表示文件类型后缀。

2、具体实现方法:将以下代码添加到所使用主题的functions.php 文件中最后一个?>的前面即可。

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

二、文件名md5转码为32位字符串

1、举例说明:如 f78c857f04e596f4e7bcd36fddf2769f.xxx,原始文件名为admin.xxx。

2、具体实现方法:将以下代码添加到所使用主题的functions.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;
}

小结

以上两种方法实现WordPress上传图片自动重命名的方法只能二选一,不可同时使用两种方法,要不然出错的话后果自负哦。经过五道博客测试后,本文的两种方法都能成功实现,换句话说有了这两种方法之后,以后我们上传图片的时候再也不用担心图片文件名是中文或其他不合格的名称了,可以放心大胆地上传图片了。


其他方法

第一种:修改wp的程序文件file.php

在file.php中查找下面这段代码

$new_file = $uploads[‘path’] . “/$filename”;

把上述代码修改成

$new_file = $uploads[‘path’] . “/”.date(“YmdHis”).floor(microtime()*1000).“.”.$ext;

显示的结果是以“年月日时分秒+千位毫秒整数”这样的格式命名的。

这 种方法弊端很大:第一上传的图片全部都会重命名;第二wp更新到新版本还要重新修改代码。

第二种:在主题functions.php中添加代码

function wpyou_rename_upload_file_prefilter($file){
$time=date(“Y-m-d”);
$file[‘name’] = $time.“”.mt_rand(1,100).“.”.pathinfo($file[‘name’] , PATHINFO_EXTENSION);
return $file;
}
add_filter(‘wp_handle_upload_prefilter’, ‘wpyou_rename_upload_file_prefilter’);

 

实现的效果和第一种的结果是一样的,这样每次更新wp都不用再反复修改程序文件了,但是弊端还是有就是上传的图片全部都会重命名。

完美的解决方法

如果按照上面的方法修改的话我上传的图片都要被重命名对于我这种用云盘来存储图片的用户来说是个麻烦,于是只能自己动手了。下面给出一种完美的解决方案,当你上传图片时,主题会检测图片名中是否包含中文字符,如果包含就执行重命名的机制,如果不包含那么直接用上传的名称作为图片名,直接添加下面这段代码到主题的functions.php文件中即可。

/* 
代码功能:中文名图片上传改名
代码介绍:http://chenxingweb.com/wordpress-uploads-zh-move.html
 */
function tin_custom_upload_name($file){
    if(preg_match(‘/[一-龥]/u’,$file[‘name’])):
    $ext=ltrim(strrchr($file[‘name’],‘.’),‘.’);
    $file[‘name’]=preg_replace(‘#^www\.#’, ”, strtolower($_SERVER[‘SERVER_NAME’])).’_’.date(‘Y-m-d_H-i-s’).‘.’.$ext;
    endif;
    return $file;
}
add_filter(‘wp_handle_upload_prefilter’,’tin_custom_upload_name’,5,1);

 

通过上面的代码片段中文图片不能显示缩略图的问题终于完美解决了。看来以后还是要研究一下wp程序的一些功能呀!今天把这种方法写到这里希望可以帮助到遇到跟我一样问题的朋友!

历史上的今天:


欢迎来到菜鸟头头的个人博客
本文章百度已收录,若发现本站有任何侵犯您利益的内容,请及时邮件或留言联系,我会第一时间删除所有相关内容。

  • A+
所属分类:WEB

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:5   其中:访客  3   博主  2

    • avatar 云点 4

      有的主机不支持中文命名文件,比如阿里云,用英文更保险些

      • avatar 网站优化笔记 0

        这个功能非常的有必要,幸好我的主题自带了,不过代码还是收下了

        • avatar 奶爸de笔记 4

          标记一下,我都是上传英文名图片,中文名的图片搬家可能会乱码。

            • avatar 头头 Admin

              @奶爸de笔记 为了省事要图片的时候都是qq截图,然后文件名就会有中文了。所以也为了更方便的省事,上传的图片都自动重命名没有中文名的。