在Wordpress中上传期间重命名文件

时间:2012-12-06 19:50:33

标签: wordpress filenames rename

我正在尝试重命名上传文件名与帖子标题匹配。

这个其他主题显示如何重命名为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的代码?

2 个答案:

答案 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);

我了解你吗?

相关问题