如何在我的插件上传器中更改上传目录

时间:2016-06-02 12:12:45

标签: php wordpress file-upload upload wordpress-plugin

我开发了一个插件,在我的插件中有一个自定义媒体上传器。当我从我的插件上传器上传任何文件时,该文件被上传并保存在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文件夹中......

4 个答案:

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