在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 );