如何实现WordPress为图片或文件自动重命名

  • 酉灿
  • WordPress
  • Jul 26, 2021

很多WordPress新手朋友在使用WordPress搭建网站的时候,经常会上传中文命名的图片,而我们使用的服务器大多不支持WordPress中文命名的图片,所以会导致上传的中文名称的图片名称显示为乱码,严重的可能会导致图片无法正常显示出来。而且在备份网站的时候也会因为中文名字命名的图片导致备份失败,致使网站的图片无法正常打开。

所以如果WordPress网站支持图片自动重命名是比较友好的,就不用担心图片的命名问题了。那么WordPress系统搭建的网站如何解决这个问题呢?

方法1:修改WordPress系统文件实现

直接通过宝塔登录你的网站服务器,如果是虚拟主机就使用FTP工具访问服务器。找到WordPress网站程序的目录下的/wp-admin/includes/file.php文件,在文件中找到以下代码(可以通过搜索 Move the file to the uploads dir 关键字找到):

// Move the file to the uploads dir
$new_file = $uploads['path'] . "/$filename";

将搜索到的以上代码修改为如下代码:

// Move the file to the uploads dir
$new_file = $uploads['path'] . "/".date("YmdHis").floor(microtime()*1000).".".$ext;

保存修改后的 file.php 文件,这样就可以实现WordPress上传图片自动重命名了,保存后上传文件名称就会以“年月日时分秒+千位毫秒整数”的格式自动重命名了。

此种方法是更改了WordPress的核心文件,如果将来你更新了WordPress版本,那么自动重命名的功能就会消失,需要你重新修改代码才行。

方法2:在主题中添加自定义函数实现

在网站当前使用的主题模板中(一般在主机中的文件路径为 /wp-content/themes/模块文件名\)下的 functions.php 文件中加入以下代码:

function seouv_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', 'seouv_rename_upload_file_prefilter');

这个方法保存后的文件名称为年月日+随机数字,如果想加上时分秒,修改第三行 $time=date(“Y-m-d”); 为 $time=date(“Y-m-d H:i:s”); 即可。

方法3:在主题中添加自定义函数实现

在网站当前使用的主题模板中(一般在主机中的文件路径为 /wp-content/themes/模块文件名\)下的 functions.php 文件中加入以下代码:

function seouv_rename_upload_file($filename) {
    $info = pathinfo($filename);
    $ext = empty($info['extension']) ? '' : '.' . $info['extension'];
    $name = basename($filename, $ext);
    return substr(md5($name), 0, 15) . $ext; // 15 为要截取的文件名长度
}
add_filter('sanitize_file_name', 'seouv_rename_upload_file', 10);

这个方法的代码文件重命名的规则为系统自动生成的一个32位的MD5加密文件名。(因为32位文件名有点长,所以我们在substr(md5($name), 0, 15) 中截断了将其设置为15位).

第2,3种方法是在主题的functions.php 文件中做的扩展,如果更换了网站主题自动重命名的功能就会消失,需要你重新添加上面的代码才行。

这三种方法都能实现图片重命名功能,具体选择哪种方法可以根据你的偏好来选择。

打赏