在 Wordpress 后端上传期间重命名文件
有没有办法在 Wordpress 3.0
后端的上传过程中重命名文件?我想要一个一致的文件命名,尤其是图像.
is there a way to rename files during the upload progress within the Wordpress 3.0
backend? I would like to have a consistent naming of files, especially for images.
我认为原始文件名的 12 (+-) 位哈希值或类似的东西会很棒.有什么建议吗?
I think an 12 (+-) digit hash value of the original filename or something similar would be awesome. Any suggestions?
问候
但在上传文件之前这样做会更容易.
But it would really be easier to do that before uploading files.
对此不太确定 - 这似乎很容易;
Not quite sure about that - this seems fairly easy;
/**
* @link http://stackoverflow.com/a/3261107/247223
*/
function so_3261107_hash_filename( $filename ) {
$info = pathinfo( $filename );
$ext = empty( $info['extension'] ) ? '' : '.' . $info['extension'];
$name = basename( $filename, $ext );
return md5( $name ) . $ext;
}
add_filter( 'sanitize_file_name', 'so_3261107_hash_filename', 10 );
此过滤器创建原始文件名的 32 个字符散列,保留文件扩展名.如果你愿意,你可以使用 substr()
把它切碎一点.
This filter creates a 32 character hash of the original filename, preserving the file extension. You could chop it down a little using substr()
if you wanted to.
一旦文件上传到您服务器上的临时目录,此过滤器就会运行,但在调整大小(如果适用)并保存到您的上传文件夹之前.
This filter runs once the file has been uploaded to a temporary directory on your server, but before it is resized (if applicable) and saved to your uploads folder.
请注意,没有文件覆盖的风险 - 如果新散列的文件与已存在的文件相同,WordPress 将尝试在文件名后附加一个递增的数字,直到不再发生冲突.
Note that there is no risk of file overwrite - in the event that a newly hashed file is the same as one that already exists, WordPress will try appending an incrementing digit to the filename until there is no longer a collision.
<?php
/**
* Plugin Name: Hash Upload Filename
* Plugin URI: http://stackoverflow.com/questions/3259696
* Description: Rename uploaded files as the hash of their original.
* Version: 0.1
*/
/**
* Filter {@see sanitize_file_name()} and return an MD5 hash.
*
* @param string $filename
* @return string
*/
function so_3261107_hash_filename( $filename ) {
$info = pathinfo( $filename );
$ext = empty( $info['extension'] ) ? '' : '.' . $info['extension'];
$name = basename( $filename, $ext );
return md5( $name ) . $ext;
}
add_filter( 'sanitize_file_name', 'so_3261107_hash_filename', 10 );