博客 / WordPress/ WordPress 附件上传自动重命名文件(保留中文标题)

WordPress 附件上传自动重命名文件(保留中文标题)

WordPress 附件上传自动重命名文件(保留中文标题)

在 WordPress 中,当用户上传一个包含中文文件名的附件(如图片、文档)时,WordPress 默认的 sanitize_file_name 函数会将其转换为拼音或移除中文字符,这可能导致文件链接难以辨识。有时,我们希望保留附件在媒体库中显示的中文标题,但实际存储在服务器上的文件名是经过重命名的(例如,使用时间戳+随机数),以避免潜在的编码问题和冲突。

解决方案:自定义文件名处理函数

通过 WordPress 的 sanitize_file_name 过滤器,我们可以自定义上传附件的重命名逻辑。以下是一个示例函数,它会在上传时自动将文件名重命名为“年月日时分秒+随机数.扩展名”的格式,同时不影响附件在媒体库中显示的标题。

// WordPress 实现附件上传自动重命名但不改变附件标题
function wp_custom_sanitize_file_name( $filename ) {
    // 获取当前时间,格式:年月日时分秒
    $time = date("YmdHis");
    // 生成一个 1000 到 9999 之间的随机数
    $random = mt_rand(1000, 9999);
    // 获取文件扩展名
    $extension = pathinfo($filename, PATHINFO_EXTENSION);
    // 组合新文件名:时间 + 随机数 + 扩展名
    return $time . "_" . $random . "." . $extension;
}
add_filter( 'sanitize_file_name', 'wp_custom_sanitize_file_name', 10, 1 );

代码说明

  • 函数作用:此函数挂钩到 sanitize_file_name 过滤器,在上传过程中对文件名进行处理。
  • 文件名生成规则:新文件名由三部分组成:精确到秒的当前时间(如 20231015143022)、一个下划线、一个4位随机数以及原始文件的扩展名。例如:20231015143022_1234.jpg
  • 保留标题:此函数仅修改存储在服务器上的物理文件名,不会影响 WordPress 媒体库中显示的“标题”、“说明”等元数据。您仍然可以为附件设置和保留中文标题。
  • 优势:避免了中文文件名可能导致的服务器兼容性问题、URL编码混乱,同时通过时间戳和随机数确保了文件名的唯一性,防止覆盖。

使用方法

  1. 将上述代码添加到您当前主题的 functions.php 文件末尾,或通过自定义插件添加。
  2. 保存文件后,新上传的附件将自动按新规则重命名。
  3. 请注意:此修改仅对之后上传的附件生效,已上传的文件名不会被更改。

扩展与注意事项

  • 自定义命名规则:您可以根据需要修改 wp_custom_sanitize_file_name 函数内的逻辑,例如使用用户ID、文章ID等作为文件名的一部分。
  • SEO 考量:对于图片,重命名为无意义的字符串可能不利于图片SEO。如果SEO是首要考虑,可能需要更复杂的方案,例如将中文标题转换为英文关键词后再用于文件名。
  • 调试:如果上传后出现问题,请检查服务器权限是否允许写入新命名的文件,并确保代码没有语法错误。

发表评论

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