WordPress用wp_handle_upload_prefilter实现中文命名图片重命名上传

2018-09-08 19:32 栏目:技术开发 查看(1371)

湖南幸运赛车爱彩人彩票网 www.schu9.cn WordPress自带的上传图片程序最后保存的文件名是图片的原始文件名,而且在默认情况下,在windows服务器上是会出现上传失败的。如下图:

253

解决方案

其实网上也有类似的解决方案,这里只是解释一下,实现代码如下:

function wg_rename_upload_file_prefilter($file){
	$prefix=date("YmdHis").mt_rand(1,100);
	$file['name'] = $prefix.'.'.pathinfo($file['name'] , PATHINFO_EXTENSION);
	return $file;
}
add_filter('wp_handle_upload_prefilter', 'wg_rename_upload_file_prefilter');

把以上代码加在functions.php中,也可以做成一个插件。

为什么这么做?

首先,熟悉WordPress的都知道add_filter是用于过滤过滤器中的内容的,简单的说就是把原先默认的内容给“篡改”掉,当然是按照我们想要实现的意图篡改。那么为什么就用到了wp_handle_upload_prefilter这个过滤器呢?当然是需要一个简单的分析过程的,分析过程如下:

①、首先从后台添加媒体页面可以知道WordPress上传文件入口文件为wp-admin/media-upload.php,在里面可以看到使用do_action钩子添加了media_upload_xxx方法。

②、进一部分追踪我们可以发现调用的是wp-admin/includes/media.php中的media_handle_upload方法,在该方法中完成附件信息写入数据库,而上传的文件保存过程的代码这方法本身并没有,而是它调用另外的一个方法(wp_handle_upload)。

③、而wp_handle_upload来自wp-admin/includes/file.php,在该方法中我们可以看到有两个过滤器wp_handle_upload_prefilter和wp_handle_upload,前者就是可以修改来自文件全局变量的信息的,而后者则是修改返回信息的。

④、通过打印或者可以看到如下信息,其实跟全局变量类似,包含name、type、temp_name、size、error等,而name就是文件名,原始的文件名。而且后续在的操作是完全按照这个数值来进行操作的,所以我们应该替换掉这个信息。

QQ截图20180908192301

⑤、而在该方法中有如下代码,就是一个过滤器,我们可以过滤$file,我们可以把$file['name']改成其他的值,比如上面就是年月日时分秒然后加上一个1-100的正整数随机数作为新文件名,就这样就实现了文件重命名。

$file = apply_filters( 'wp_handle_upload_prefilter', $file );

替换后在该方法中打印$file,就变成了下面这样的了

QQ截图20180908192913

以上就是开头的解决方案的简单分析过程,如果你只是做运营而非做技术开发的朋友,那么请忽略下面的分析过程。

与我们的项目经理联系
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流

转载请注明出处:WordPress用wp_handle_upload_prefilter实现中文命名图片重命名上传 - 微构网络
分享:
  • 中央直属机关工委主要职责 2019-05-22
  • 打造“互联网+”,共享经济改变百姓生活 2019-04-22
  • 破财免灾!C罗愿向西班牙税务部门缴纳1880万欧元 2019-04-19
  • 中国品牌SUV新标杆 人民网试驾WEY VV7VV5 2019-04-19
  • 杨爱国:借助小博会促进尚志社会经济加快发展 2019-04-15
  • 泪目!川农院士逝世5年,夫人每日都去看他的雕像…思念如马,不停蹄! 2019-04-15
  • 海信世界杯首秀出奇招 竟打出俄文广告 2019-03-25
  • 财政部:对原产于美国的500亿美元进口商品加征关税 2019-03-11
  • 我和《人民日报》(我与人民日报·纪念人民日报创刊70周年) 2019-03-11
  • 杭州再增100个海绵城市项目 2018-11-08
  • 新华网申领新闻记者证资格审核公示 2018-11-08
  • 720| 906| 248| 990| 74| 737| 976| 918| 458| 319|