虚位以待,此位置招租
虚位以待,此位置招租
虚位以待,此位置招租
虚位以待,此位置招租
虚位以待,此位置招租
虚位以待,此位置招租
DeepSook聚合登录 阿里云服务器 99元/年 大流量卡 - 免开卡,免运费 此位置招租 此位置招租 此位置招租 此位置招租 此位置招租 此位置招租 此位置招租 此位置招租 此位置招租 此位置招租 此位置招租 此位置招租 此位置招租 此位置招租 此位置招租
输入验证码,即可复制
扫描二维码输入:jiuge,即可获取验证码
只需要3秒时间
返回列表 发布新帖

[WordPress教程] WordPress设置上传图片自动重命名

10 0
发表于 3 天前 | 查看全部 阅读模式
WordPress设置上传图片自动重命名方法分享:

在使用WordPress过程中,上传的图片、文件如果是中文名的话有时候可能或有一些奇怪的问题(这并不一定是WordPress的问题,可能是一些插件、主题之类的…),没有问题的情况下,修改默认的文件名,随机生成唯一的文件名也是有好处的,在某些站点下甚至还可以提高安全性,避免站点文件被爆破扫描下载。下面给大家分享几个自动重命名的功能代码和修改程序源代码实现的方式的,可以根据自己的需求去选择。

方法一:使用功能代码 推荐

自动重命名代码一:按按时间重命名

上传文件时会以“年月日时分秒_id”的格式重命名文件,如“20240105092139_6597ca23178de.jpg”
  1. // 重命名WordPress上传的文件
  2. function rename_uploaded_file($file) {
  3.     $time = date("YmdHis");
  4.     $unique_id = uniqid(); // 使用uniqid()函数生成唯一标识符
  5.     $file_extension = pathinfo($file['name'], PATHINFO_EXTENSION);
  6.     $file['name'] = $time . "_" . $unique_id . "." . $file_extension;
  7.     return $file;
  8. }
  9. add_filter('wp_handle_upload_prefilter', 'rename_uploaded_file');
复制代码


函数详细解释

function rename_uploaded_file($file) {...}:
定义了一个名为rename_uploaded_file的函数,这个函数接收一个参数$file,这个参数是一个数组,包含了上传文件的信息。
$time = date("YmdHis");:
这行代码获取当前的日期和时间,格式为”年月日时分秒”。
$unique_id = uniqid();:
这行代码使用uniqid()函数生成一个唯一标识符。
$file_extension = pathinfo($file['name'], PATHINFO_EXTENSION);:
这行代码使用pathinfo函数获取文件的扩展名,并将其存储在变量$file_extension中。
$file['name'] = $time . "_" . $unique_id . "." . $file_extension;:
这行代码将文件名更改为当前的日期和时间,后面跟着一个下划线,然后是唯一标识符,最后是文件的扩展名。
return $file;:
这行代码返回修改后的文件信息。
add_filter('wp_handle_upload_prefilter', 'rename_uploaded_file');:
这行代码将rename_uploaded_file函数添加到WordPress的wp_handle_upload_prefilter过滤器。这个过滤器在文件上传之前被应用,允许你修改文件的属性。

PHP的uniqid()函数简介

PHP的uniqid()函数用于生成一个唯一的ID。这个函数基于当前的微秒时间戳生成一个唯一的字符串。这个函数通常用于生成数据库记录的唯一键,或者用于生成临时文件名。

自动重命名代码二:用MD5加密生成数字并重命名

在上传文件时,将文件名更改为基于当前时间和原始文件名的MD5哈希的格式。
  1. function rename_filename($filename) {
  2.     $info = pathinfo($filename);
  3.     $ext = empty($info['extension']) ? '' : '.' . $info['extension'];
  4.     $name = basename($filename, $ext);
  5.     $time = date("YmdHis"); // 获取当前时间
  6.     return $time . "_" . substr(md5($name), 0, 10) . $ext; // 文件名包含时间和基于原始文件名的MD5哈希的前10个字符
  7. }
  8. add_filter('sanitize_file_name', 'rename_filename', 10);
复制代码


函数详细解释

function rename_filename($filename) {...}:
定义了一个名为rename_filename的函数,这个函数接收一个参数$filename,这个参数是上传文件的原始文件名。
$info = pathinfo($filename);:
这行代码使用pathinfo函数获取文件名的路径信息,包括目录名、基本名、扩展名等,并将这些信息存储在数组$info中。
$ext = empty($info['extension']) ? '' : '.' . $info['extension'];:
这行代码检查$info数组中的'extension'元素是否为空。如果为空,就将$ext设置为空字符串,否则将$ext设置为文件的扩展名,前面加上一个点。
$name = basename($filename, $ext);:
这行代码获取文件的基本名,也就是除去扩展名的部分。
$time = date("YmdHis");:
这行代码获取当前的日期和时间,格式为”年月日时分秒”。
return $time . "_" . substr(md5($name), 0, 10) . $ext;:
这行代码将文件名更改为当前的日期和时间,后面跟着一个下划线,然后是原始文件名的MD5哈希的前10个字符,最后是文件的扩展名。
add_filter('sanitize_file_name', 'rename_filename', 10);:
这行代码将rename_filename函数添加到WordPress的sanitize_file_name过滤器。这个过滤器在文件上传时被应用,允许你修改文件的名称。这里的10是函数的优先级。

自动重命名代码三:中文图片自动重命名

当你上传图片时,主题会检测图片名中是否包含中文字符,如果包含就执行重命名的机制,如果不包含那么直接用上传的名称作为图片名
  1. function rename_uploaded_file($file){
  2.     if(preg_match('/[\x{4e00}-\x{9fa5}]/u', $file['name'])):
  3.         $ext = pathinfo($file['name'], PATHINFO_EXTENSION);
  4.         $file['name'] = date('Y-m-d_H-i-s') . '.' . $ext;
  5.     endif;
  6.     return $file;
  7. }
  8. add_filter('wp_handle_upload_prefilter', 'rename_uploaded_file', 5, 1);
复制代码

函数详细解释

function rename_uploaded_file($file){...}:
定义了一个名为rename_uploaded_file的函数,这个函数接收一个参数$file,这个参数是一个数组,包含了上传文件的信息。
if(preg_match('/[\x{4e00}-\x{9fa5}]/u', $file['name']))::
这行代码使用正则表达式'/[\x{4e00}-\x{9fa5}]/u'检查文件名$file['name']是否包含中文字符。如果包含,就执行后面的代码。
$ext = pathinfo($file['name'], PATHINFO_EXTENSION);:
这行代码获取文件的扩展名,并将其存储在变量$ext中。
$file['name'] = date('Y-m-d_H-i-s') . '.' . $ext;:
这行代码将文件名更改为当前的日期和时间,格式为”年-月-日_时-分-秒”,然后加上原始的文件扩展名。
return $file;:
这行代码返回修改后的文件信息。
add_filter('wp_handle_upload_prefilter', 'rename_uploaded_file', 5, 1);:
这行代码将rename_uploaded_file函数添加到WordPress的wp_handle_upload_prefilter过滤器。这个过滤器在文件上传之前被应用,允许你修改文件的属性。这里的5是函数的优先级,1是函数接收的参数数量。

也可以将代码添加到当前主题functions.php模板文件中。

方法二:修改源程序文件 – 不推荐!

操作方法:

在wordpress程序的wp-admin/includes/目录中找到file.php文件,并进行编辑,在327行左右找到以下代码:
  1. // Move the file to the uploads dir
  2. $new_file = $uploads['path'] . "/$filename";
  3. if ( false === @ move_uploaded_file( $file['tmp_name'], $new_file ) )
  4. return $upload_error_handler( $file, sprintf( __('The uploaded file could not be moved to %s.' ), $uploads['path'] ) );
复制代码
将其替换为
  1. // Move the file to the uploads dir
  2. $new_file = $uploads['path'] . "/".date("YmdHis").floor(microtime()*1000).".".$ext;
  3. if ( false === @ move_uploaded_file( $file['tmp_name'], $new_file ) )
  4. return $upload_error_handler( $file, sprintf( __('The uploaded file could not be moved to %s.' ), $uploads['path'] ) );
复制代码
PS整体代码其实就是替换掉了”/$filename”;

保存后覆盖原文件,那么上传文件就会以“年月日时分秒+千位毫秒整数”的格式重命名文件了,如“20121023122221765.jpg”


注意事项
如果是修改的主题函数模板方式,在更新主题后,自己添加的代码,一般是会覆盖的,所以升级主题可以先做好备份。
如果是修改的程序源文件,升级程序后,程序升级后也是会被覆盖,也要做好备份。修改程序的方式通常是不推荐的,小白的话还容易搞出问题。
以上方法请选择一种就好了。


免责声明

本社区仅提供信息交流平台,帖子内容由用户自行发布,不代表社区立场。用户对发布内容负全责,包括版权、隐私、诽谤等,社区不承担因使用社区内容导致的损失。禁止发布侵权、隐私信息,发现侵权请联系我们。社区不负责第三方内容,用户因访问第三方内容产生的损失,社区不担责。用户须遵守规则和法律,不得发布违法、不当内容,违规内容将被删除。发表帖子即同意本声明,不同意请勿发帖。


特别提醒:网络空间并非法外之地,请广大用户自觉遵守法律法规,共同营造健康、文明、有序的网络环境。

本社区运营团队

联系我们: 如有疑问或发现违规行为,请联系管理员:kefu@foxccs.com

远方路灯明灭,银河倾斜,一斛星斗洒满天街。

回复

快捷回复: 经历想经历的,成为想成为的 - 九歌社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

投诉/建议联系

foxccs@qq.com

网站内容来源于网络,版权争议与本站无关。
请在下载后的24小时内从您的设备中彻底删除上述内容。

  • QQ交流群
  • 添加微信客服
Copyright © 2004-2025 九歌社区 版权所有 All Rights Reserved.
关灯 在本版发帖
扫一扫添加微信客服
官方QQ交流群
手机扫一扫访问
返回顶部
快速回复 返回顶部 返回列表