我开发了一个插件,在我的插件中有一个自定义媒体上传器。当我从我的插件上传器上传任何文件时,该文件被上传并保存在WordPress默认的uploads/
文件夹中。
但我希望当我从我的插件上传程序上传文件时,这些文件应该上传到Wordpress自定义uploads
文件夹中的新文件夹中,以便我从谷歌搜索并找到此代码:
<?php
function upload_dir($dirs)
{
$dirs['subdir'] = '/my-uploads';
$dirs['path'] = $dirs['basedir'] . '/my-uploads';
$dirs['url'] = $dirs['baseurl'] . '/my-uploads';
return $dirs;
}
add_filter('upload_dir', 'upload_dir');
?>
现在从(帖子,页面等)上传的所有文件也都存储在该插件文件夹中。
我希望只有那些从我的插件上传器上传的文件应该保存在my-folder
中,其余的文件应该保存在WordPress默认的uploads
文件夹中......
答案 0 :(得分:6)
在上传代码之前,请使用
add_filter('upload_dir', 'upload_dir');
然后在上传代码后,使用:
remove_filter('upload_dir', 'upload_dir');
这样,过滤器仅适用于您的插件上传,而不适用于其他地方。
答案 1 :(得分:2)
您可能需要使用普通PHP自己处理文件处理。处理表单时,请尝试以下操作:
$uploaddir = '/path/to/plugin/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
if( move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile))
echo 'success!';
else
echo 'fail!';
并使用print_r($_FILES);
进行调试。
尽管非常非常小心 - 您可能会产生安全风险。有关详细信息,请参阅Secure PHP File Upload Script。
答案 2 :(得分:2)
这可能与.htaccess设置有关。 .htaccess文件会限制您可以执行的操作。或者它可能是您文件之外的其他设置。您是否尝试在多台服务器上运行此功能来测试它?
答案 3 :(得分:2)
这是一个有效的solution。
add_filter('upload_dir', 'my_upload_dir');
$upload = wp_upload_dir();
remove_filter('upload_dir', 'my_upload_dir');
funcion my_upload_dir($upload) {
$upload['subdir'] = '/sub-dir-to-use' . $upload['subdir'];
$upload['path'] = $upload['basedir'] . $upload['subdir'];
$upload['url'] = $upload['baseurl'] . $upload['subdir'];
return $upload;
}