WordPress添加媒体中文名图片上传改名(优化版)

一点优化
一点优化
一点优化
461
文章
40
评论
2019年12月25日18:03:29 评论 417围观 4430字阅读14分46秒
wordpress添加媒体上传图片的时候,我们有时候选择的图片是中文名,由于WordPress是国外程序,对中文命名的图片不友好,所以上传后就会出现错误。但是我们有时候保存在桌面或者其他地方的图片就是中文命名,现在要上传到WordPress多媒体中,或者上传到文章中,我们改怎么办?
WordPress添加媒体中文名图片上传改名(优化版)
俗话说:“功夫不负苦心人呢”,问题还是被我给发现了,原来编码的问题如果我们上传的图片名称是中文的那么wp的缩略图机制处理不了于是就出现了我这样的问题。
wp-admin/includes/file.php文件中有这么一段代码其中第2行控制着我们上传图片的命名:

// Move the file to the uploads dir

$new_file = $uploads[‘path’] . “/$filename”;  //新上传的图片按上传时的名称显示

if ( false === @ move_uploaded_file( $file[‘tmp_name’], $new_file ) ) {

if ( 0 === strpos( $uploads[‘basedir’], ABSPATH ) )

$error_path = str_replace( ABSPATH, ”, $uploads[‘basedir’] ) . $uploads[‘subdir’];
else

$error_path = basename( $uploads[‘basedir’] ) . $uploads[‘subdir’];

return $upload_error_handler( $file, sprintf( __(‘The uploaded file could not be moved to %s.’ ), $error_path ) );
}

既然定位到了问题所在当然就是赶紧解决掉好让图片正常显示了!

处理方法汇总

问题既然浮出了水面,按照一个度娘的忠实粉丝当然是先上百度去找答案,下面是百度查找到的3种答案。
第一种:修改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文件中即可。

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

/* 中文名图片上传改名 /* ——————- */ 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);

如果上面的不行可以试试下面的这个自用的,感觉可以(优化版)
//WordPress上传中文字体图片自动转换为域名日期时间
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);

WordPress添加媒体上传图片的时候,我们有时候选择的图片是中文名,由于WordPress是国外程序,对中文命名的图片不友好,所以上传后就会出现错误。但是我们有时候保存在桌面或者其他地方的图片就是中文命名,现在要上传到WordPress多媒体中,或者上传到文章中,我们改怎么办?
WordPress添加媒体中文名图片上传改名(优化版)
俗话说:“功夫不负苦心人呢”,问题还是被我给发现了,原来编码的问题如果我们上传的图片名称是中文的那么wp的缩略图机制处理不了于是就出现了我这样的问题。
wp-admin/includes/file.php文件中有这么一段代码其中第2行控制着我们上传图片的命名:

// Move the file to the uploads dir

$new_file = $uploads[‘path’] . “/$filename”;  //新上传的图片按上传时的名称显示

if ( false === @ move_uploaded_file( $file[‘tmp_name’], $new_file ) ) {

if ( 0 === strpos( $uploads[‘basedir’], ABSPATH ) )

$error_path = str_replace( ABSPATH, ”, $uploads[‘basedir’] ) . $uploads[‘subdir’];
else

$error_path = basename( $uploads[‘basedir’] ) . $uploads[‘subdir’];

return $upload_error_handler( $file, sprintf( __(‘The uploaded file could not be moved to %s.’ ), $error_path ) );
}

既然定位到了问题所在当然就是赶紧解决掉好让图片正常显示了!

处理方法汇总

问题既然浮出了水面,按照一个度娘的忠实粉丝当然是先上百度去找答案,下面是百度查找到的3种答案。
第一种:修改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文件中即可。

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

/* 中文名图片上传改名 /* ——————- */ 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);

  • 微信
  • 这是我的微信扫一扫
  • weinxin
  • QQ群
  • 我的QQ交流群扫一扫
  • weinxin
一点优化
  • 本文由 发表于 2019年12月25日18:03:29
WordPress添加好看的移动端底部菜单导航 wp美化

WordPress添加好看的移动端底部菜单导航

WordPress添加好看的移动端底部菜单导航,以前也分享过一个导航,不过那个不太好看,这里在分享一个导航在电脑端不显示,手机端显示,其它系统程序也可以用,把代码添加到主题的页脚文件就可以啦,CSS样...
利用HTML5预加载实现给wordpress预加载页面 WP综合教程

利用HTML5预加载实现给wordpress预加载页面

HTML5引入了预加载页面技术,可以大幅度提高网站加载时间以及速度,HTML5预加载是一种浏览器机制,使用浏览器空闲时间来预先下载/加载用户接下来很可能会浏览的页面,资源。 浏览器载入当前页面完成后,...
WordPress网站SEO优化插件:Smart SEO Tool WP插件

WordPress网站SEO优化插件:Smart SEO Tool

一点优化的徒弟找了一款WordPress网站SEO优化插件,这个插件聚合了一个网站所需要的基础功能,只要是做优化的应该没有不喜欢的,这款叫Smart SEO Tool,下面介绍一下这款插件的功能,个人...
匿名

发表评论

匿名网友 填写信息

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