我正在尝试重命名与帖子标题匹配的上传文件名。
这个另一个线程显示了如何重命名为哈希:
Rename files during upload within Wordpress backend
使用此代码:
function make_filename_hash($filename) {
$info = pathinfo($filename);
$ext = empty($info['extension']) ? '' : '.' . $info['extension'];
$name = basename($filename, $ext);
return md5($name) . $ext;
}
add_filter('sanitize_file_name', 'make_filename_hash', 10);
有谁知道重命名文件以匹配 Post Title.extension 的代码?
最佳答案
barakadam 的回答几乎是正确的,只是根据我在他的回答下方留下的评论稍作修正。
function new_filename($filename, $filename_raw) {
global $post;
$info = pathinfo($filename);
$ext = empty($info['extension']) ? '' : '.' . $info['extension'];
$new = $post->post_title . $ext;
// the if is to make sure the script goes into an indefinate loop
if( $new != $filename_raw ) {
$new = sanitize_file_name( $new );
}
return $new;
}
add_filter('sanitize_file_name', 'new_filename', 10, 2);
代码说明:
假设您将原始文件名为
picture one.jpg
的文件上传到名为“我在巴黎/伦敦的假期”的帖子中。当您上传文件时,WordPress 会使用
sanitize_file_name()
函数从原始文件名中删除特殊字符。函数底部的右侧是过滤器所在的位置。
// line 854 of wp-includes/formatting.php
return apply_filters('sanitize_file_name', $filename, $filename_raw);
此时, $filename 将是
picture-one.jpg
。因为我们使用了 add_filter()
,我们的 new_filename() 函数将使用 $filename 作为 picture-one.jpg
和 $filename_raw 作为 picture one.jpg
被调用。我们的 new_filename() 函数然后将文件名替换为附加了原始扩展名的帖子标题。如果我们停在这里,新的文件名
$new
最终将是 My Holiday in Paris/London.jpg
,我们都知道这是一个无效的文件名。这是我们再次调用 sanitize_file_name 函数的时候。注意那里的条件语句。由于此时
$new != $filename_raw
,它尝试再次清理文件名。sanitize_file_name()
将被调用,在函数结束时, $filename
将是 My-Holiday-in-Paris-London.jpg
而 $filename_raw
仍然是 My Holiday in Paris/London.jpg
。由于 apply_filters()
,我们的 new_filename()
函数再次运行。但这一次,因为 $new == $filename_raw
,这就是它结束的地方。最终返回
My-Holiday-in-Paris-London.jpg
。关于wordpress - 在 Wordpress 中上传期间重命名文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13751377/