在 WordPress 3.0
后台上传过程中是否有一种方法可以重命名文件?我想要对文件进行一致的命名,尤其是对于图片。
我认为对原始文件名进行使用 12 (+-) 位数字哈希值或类似的方式进行命名将非常棒。有什么建议吗?
问候
在 WordPress 3.0
后台上传过程中是否有一种方法可以重命名文件?我想要对文件进行一致的命名,尤其是对于图片。
我认为对原始文件名进行使用 12 (+-) 位数字哈希值或类似的方式进行命名将非常棒。有什么建议吗?
问候
但在上传文件之前这样做会更容易。
不太确定 - 这似乎很容易;
/**
* @link https://dev59.com/PHA75IYBdhLWcg3wf5RV#3261107
*/
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()
函数。
该过滤器在文件被上传到服务器上的临时目录后运行,但在调整大小(如果适用)并保存到上传文件夹之前运行。
请注意,不会发生文件覆盖的风险 - 如果新哈希文件与已存在的文件相同,WordPress会尝试将增量数字追加到文件名中,直到没有冲突为止。
<?php
/**
* Plugin Name: Hash Upload Filename
* Plugin URI: https://dev59.com/PHA75IYBdhLWcg3wf5RV
* 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 );
http://wpapi.com/change-image-name-to-wordpress-post-slug-during-upload/
顺便说一句:
给sanitize_file_name
添加过滤器是完全错误的,因为sanitize_file_name()
函数是一个帮助格式化字符串的辅助函数,它可能在其他地方被使用,比如插件或主题。
function wp_modify_uploaded_file_names($file) {
$info = pathinfo($file['name']);
$ext = empty($info['extension']) ? '' : '.' . $info['extension'];
$name = basename($file['name'], $ext);
$file['name'] = uniqid() . $ext; // uniqid method
// $file['name'] = md5($name) . $ext; // md5 method
// $file['name'] = base64_encode($name) . $ext; // base64 method
return $file;
}
add_filter('wp_handle_upload_prefilter', 'wp_modify_uploaded_file_names', 1, 1);
我也实现了同样的功能,但我想要一个比原来更随机的文件名,因为我使用这个功能的网站只是用于图片,而且所有文件都在同一个目录下。
我采用了以下方法:
return md5($ip . uniqid(mt_rand(), true)) . $ext;
使用媒体库功能无法自动重命名文件。建议在上传文件之前先将其重命名。即使上传了文件,也只能通过FTP而非WordPress进行重命名。
唯一的方法是使用插件将其钩入媒体库上传过程中。但最好还是在上传文件之前进行重命名,这样会更容易些。
hash-upload.php
的文件中,然后将其放入您的插件文件夹 :) - TheDeadMedic