一些你可以尝试的东西,但我还没有完全测试过,你需要做一些QA来确保它不会影响其他任何东西。说明:
返回上载目录路径的函数称为wp\\u upload\\u dir()。它被用于许多地方(以及许多插件)来生成,呃,上传目录的路径。它接受一个名为time的参数,该参数(通过时)将指示在dir结构中使用哪个年/月。
不幸的是,当从帖子上传时,没有地方可以过滤这个“时间”。从帖子编辑屏幕上载媒体时,执行上载的函数(我敢肯定称为media\\u handle\\u upload())始终使用帖子的发布日期。它仅在上载与帖子无关时使用当前时间。那里没有过滤器。
但是wp\\u upload\\u dir()函数有一个可以使用的过滤器,名为“upload\\u dir”。它过滤包含生成的目录的所有部分的数组。其中一个数组项名为“subdir”,它包含路径的年/月部分(如果适用)。您可以使用此筛选器检查子目录部分是否为非空,如果为空,则将其值替换为当前年/月。
这里的冒险在于,您无法说出调用wp\\u upload\\u dir的上下文,并且您打赌没有其他函数以会中断的方式实际使用时间参数。我快速查看了一下核心,我看到它使用的唯一地方是wp\\u upload\\u bits函数,我不确定它到底是用来做什么的。在任何情况下,我猜只有在实际上传文件时才会调用它,所以您可能在这方面做得很好。但您需要使用已安装的插件进行彻底测试。
代码如下所示:
function wpsx_53067_filter_upload_dir($arr) {
if(isset($arr[\'subdir\']) && !empty($arr[\'subdir\'])) {
// The existing dir, for reference
$old_dir = $arr[\'subdir\'];
// Your new dir (you could edit this to grab the current year/month)
$new_dir = \'/any-new-dir-you-like\';
// Update the array. Need to update the subdir, path and url items (they all contain the full path)
$arr[\'subdir\'] = $new_dir;
$arr[\'path\'] = str_replace($old_dir, $new_dir, $arr[\'path\']);
$arr[\'url\'] = str_replace($old_dir, $new_dir, $arr[\'url\']);
}
return $arr;
}
add_filter(\'upload_dir\', \'wpsx_53067_filter_upload_dir\');