【问题标题】:How to change upload directory in my plugin uploader如何在我的插件上传器中更改上传目录
【发布时间】:2016-10-02 04:08:28
【问题描述】:

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

【问题讨论】:

    标签: php file-upload upload wordpress


    【解决方案1】:

    在上传代码之前,使用

    add_filter('upload_dir', 'upload_dir'); 
    

    然后在你上传代码后,使用:

    remove_filter('upload_dir', 'upload_dir'); 
    

    这样,过滤器仅适用于您的插件上传,不适用于其他地方。

    【讨论】:

    • 通过这样做,它再次将文件保存在默认上传文件夹而不是插件文件夹中......
    • 你能发布一段你的代码吗?通常应该起作用的是:add_filter、wp_handle_upload、remove_filter。
    • wp_handle_upload 是什么意思?
    • 我没用过这个功能……为什么用它?
    • @AasmaZafar 这是一个很好的答案。你试过了吗?最好能展示实现上传功能的代码。
    【解决方案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

    【讨论】:

      【解决方案3】:

      这可能与 .htaccess 设置有关。 .htaccess 文件限制了您可以执行的操作。或者它可能是您文件之外的其他设置。您是否尝试过在超过 1 个服务器上运行它来测试它?

      【讨论】:

        【解决方案4】:

        这是一个有效的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;
        }
        

        【讨论】:

          猜你喜欢
          • 2017-04-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-30
          • 2014-08-17
          • 2021-07-15
          • 2014-12-04
          相关资源
          最近更新 更多