Php WordPress 3.0媒体上传程序更改我的图像文件名

Php WordPress 3.0媒体上传程序更改我的图像文件名,php,wordpress,Php,Wordpress,我遇到了WordPress 3.0的问题 我在图像文件前面加了一个下划线字符(_somefile.jpg),以便与没有下划线的图像相比,标记它们的特定用途 然而,我刚刚发现WP3.0中的媒体上传程序从文件名中删除了这些下划线。起初我以为它只是为图片重命名wordpress标题,但我已经在FTP中验证了它,并且它实际上重命名了文件本身 我是否可以通过脚本切换设置来禁用此文件名编辑 wp includes/formatting.php第681行中的函数清理文件名() $filename = trim

我遇到了WordPress 3.0的问题

我在图像文件前面加了一个下划线字符(_somefile.jpg),以便与没有下划线的图像相比,标记它们的特定用途

然而,我刚刚发现WP3.0中的媒体上传程序从文件名中删除了这些下划线。起初我以为它只是为图片重命名wordpress标题,但我已经在FTP中验证了它,并且它实际上重命名了文件本身


我是否可以通过脚本切换设置来禁用此文件名编辑

wp includes/formatting.php第681行中的函数
清理文件名()

$filename = trim($filename, '.-_');
从函数文档中可以看到:“从文件名的开头和结尾修剪句点、破折号和下划线。”

在此
trim()
之后运行一个名为
sanitize\u file\u name
的筛选器。此代码将修复您的问题(未测试):


在一个衬里中有同样的东西(经过测试!):


我确认,至少WordPress 3.5.1正在剥离前导下划线,并且添加此筛选器保留了前导下划线。

谢谢Adam。只是为了澄清一下,我可以将这个函数添加到我的主题的functions.php中。正确吗?或者,有没有办法改变数据库中的这种行为?这将允许我只做一次,而不必一直运行命令。不确定“在数据库中”是什么意思,但这是修改WordPress行为的预期方式。我将把它添加到functions.php。我将其添加到数据库的意思是:如果在db中有一个设置(例如:preserve_leading_下划线)来确定这是打开还是关闭,我宁愿将其设置为关闭,而不是添加必须处理每个请求(客户端和管理员)的代码。@Adam-有什么方法可以包装“add_filter()”吗语句,这样它就不会在网站的每个页面加载时都得到处理?我只想在需要的时候处理它,比如当站点的管理员用户通过媒体加载器上传图像时。如果可能的话,我还想把它包装在一个“if wp version>=3”测试中。
function preserve_leading_underscore( $filename, $filename_raw ) {
    if( "_" == substr($filename_raw, 0, 1) ) {
        $filename = "_" . $filename;
    }

    return $filename;
}
add_filter('sanitize_file_name', 'preserve_leading_underscore', 10, 2);
add_filter('sanitize_file_name',create_function('$f,$fr','return preg_match("`^_`",$fr) ? "_".$f : $f;'),10,2);