我正在尝试重命名上传文件名与帖子标题匹配。
这个其他主题显示如何重命名为hash:
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的代码?
答案 0 :(得分:4)
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
的原始文件名的文件上传到名为“My Holiday in Paris / London”的帖子。
上传文件时,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
。
答案 1 :(得分:0)
这样的东西? (考虑$post
是你的帖子变量,将其设为全局):
function new_filename($filename) {
global $post;
$info = pathinfo($filename);
$ext = empty($info['extension']) ? '' : '.' . $info['extension'];
return $post->post_title . $ext;
}
add_filter('sanitize_file_name', 'new_filename', 10);
我了解你吗?