博客 / WordPress/ WordPress两种方法实现上传媒体图片文件自动重命名

WordPress两种方法实现上传媒体图片文件自动重命名

WordPress两种方法实现上传媒体图片文件自动重命名

在发布文章时,我们经常需要上传图片、音频等媒体文件。然而,WordPress 默认不具备自动重命名新上传文件的功能,手动逐个重命名又非常繁琐。那么,如何实现上传媒体文件的自动重命名呢?

本文整理了两种在 WordPress 中实现上传文件自动重命名的可靠方法,供大家参考使用。

方法一:按上传时间自动重命名

此方法通过获取当前时间戳并添加随机数来生成唯一的文件名,能有效避免文件名冲突。

// WordPress上传文件重命名 - 基于时间戳
function git_upload_filter($file) {
    // 生成格式为 YYYYMMDDHHMMSS 的时间戳
    $time = date("YmdHis");
    // 组合新文件名:时间戳 + 1-100的随机数 + 原扩展名
    $file['name'] = $time . "_" . mt_rand(1, 100) . "." . pathinfo($file['name'], PATHINFO_EXTENSION);
    return $file;
}
// 在文件上传预处理阶段应用此过滤器
add_filter('wp_handle_upload_prefilter', 'git_upload_filter');

说明与修正: 原代码中时间戳与随机数直接相连,可能导致可读性不佳。此处已添加下划线 _ 作为分隔符,使文件名更清晰(例如:20231015143045_78.jpg)。

方法二:使用 MD5 哈希值重命名

此方法将原始文件名进行 MD5 加密,并取部分哈希值作为新文件名,能生成固定长度的唯一名称。

// WordPress上传文件重命名 - 基于MD5哈希
function rename_filename($filename) {
    $info = pathinfo($filename);
    // 安全地获取文件扩展名(修正了原代码中的 emptyempty 错误)
    $ext = empty($info['extension']) ? '' : '.' . $info['extension'];
    // 获取不含扩展名的原始文件名
    $name = basename($filename, $ext);
    // 对原始文件名进行MD5加密,并取前20位字符,最后拼接扩展名
    return substr(md5($name), 0, 20) . $ext;
}
// 在WordPress清理文件名时应用此过滤器
add_filter('sanitize_file_name', 'rename_filename', 10);

说明与修正: 修正了原代码中的语法错误 emptyempty,应为 empty。此方法会完全改变文件名,使其变为类似 a3f8c72e1b9d0546a7b2.jpg 的字符串,彻底避免中文或特殊字符可能引发的问题,但会失去原文件名的可读性。

使用方法与注意事项

选择上述任一方法,将对应的代码片段添加到您当前使用主题的 functions.php 文件末尾即可生效。

重要提示:

  • 二选一: 请勿同时添加两段代码,否则可能导致冲突或不可预知的结果。
  • 备份: 在修改主题文件前,建议先进行备份。
  • 子主题: 如果您使用的是子主题,请将代码添加到子主题的 functions.php 中,以避免主题更新时修改被覆盖。
  • 生效范围: 代码添加后,仅对新上传的文件生效,已存在于媒体库中的文件名称不会被更改。

发表评论

您的邮箱不会公开。必填项已用 * 标注。