在使用wordpress建站的时候我们会发现在上传同命名文件的时候两个名字一样的文件上传时后者会覆盖之前的文件,
这样会导致图文不一致,这样对于使用老版本的wordpress站长来说是一个麻烦,但是升级就会把原来优化修改过的代码覆盖掉,
其实使用两种方法可以解决如下:
第一种方法:
找到wordpress程序的根目录下的/wp-admin/includes/file.php文件,编辑,找到以下代码,如下图所示 (你也可以使用搜索功能,搜索Move the file to the uploads dir)
[code]// Move the file to the uploads dir
$new_file = $uploads[‘path’] . “/$filename”;
if ( false === @ move_uploaded_file( $file[‘tmp_name’], $new_file ) )
return $upload_error_handler( $file,
sprintf( __(‘The uploaded file could not be moved to %s.’ ), $uploads[‘path’] ) );[/code]
2、将上述代码替换为:(当然你也可以装上述代码注释,方便以后还原)
[code]// Move the file to the uploads dir
$new_file = $uploads[‘path’] . “/”.date(“YmdHis”).floor(microtime()*1000).”.”.$ext;
if ( false === @ move_uploaded_file( $file[‘tmp_name’], $new_file ) )
return $upload_error_handler
( $file, sprintf( __(‘The uploaded file could not be moved to %s.’ ), $uploads[‘path’] ) );[/code]
保存file.php,这样就可以实现wordpress上传图片自动重命名了。
以上代码意思就是,保存后覆盖原文件,那么上传文件就会以“年月日时分秒+千位毫秒整数”的格式重命名文件。这就再也不用担心图片文件名相同而覆盖了原文件。
第2种方法:
在我们wordpress网站模板目录(wp-content\themes\模块文件名\)下的functions.php中加入以下代码 ,直接放在functions.php文件的最后(注意是 ?> 之前,如下图)就可以。
[code]function new_filename($filename) {
$info = pathinfo($filename);
$ext = empty($info[‘extension’]) ? ” : ‘.’ . $info[‘extension’];
$name = basename($filename, $ext);
return substr(md5($name), 0, 20) . $ext;
}
add_filter(‘sanitize_file_name’, ‘new_filename’, 10);[/code]
保存functions.php,就可以了。
以上代码将文件名称在上传过程中就自动重命名了。名字规则为系统自动生成的一个32位的MD5加密文件名。(因为32位文件名有点长,所以我们在substr(md5($name), 0, 20) 中截断了将其设置为20位).
PS:两种方法各有所长,第一种方法不会因为更换模板而导致失效,第二种方法如果更换模板就需要重新加入代码。