3

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

这个另一个线程显示了如何重命名为哈希:
在 Wordpress 后端上传期间重命名文件

使用此代码:

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 的代码?

4

2 回答 2

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一个名为“我在巴黎/伦敦的假期”的帖子的原始文件名的文件。

当您上传文件时,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 aspicture-one.jpg和 $filename_raw as调用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.jpgwhile$filename_raw仍然是My Holiday in Paris/London.jpg. 由于apply_filters(),我们的new_filename()函数再次运行。但这一次,因为$new == $filename_raw,这就是它结束的地方。

My-Holiday-in-Paris-London.jpg最终归还。

于 2012-12-06T20:19:26.643 回答
0

像这样的东西?(考虑到$post您的 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);

我理解你了吗?

于 2012-12-06T20:01:27.543 回答