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

7

我开发了一个插件,在我的插件中有一个自定义的媒体上传功能。当我从我的插件上传任何文件时,这个文件会被上传并保存在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个回答

6
在上传代码之前,使用 </p>
add_filter('upload_dir', 'upload_dir'); 

上传代码后,请使用以下命令:
remove_filter('upload_dir', 'upload_dir'); 

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


通过这样做,它会将文件保存到默认的上传文件夹中,而不是插件文件夹中... - Aasma Zafar
你能发一下你代码的摘录吗?通常应该是这样的:add_filter、wp_handle_upload、remove_filter。 - Marcel de Hoog
什么是 wp_handle_upload? - Aasma Zafar
我没有使用过这个函数...它是用来做什么的? - Aasma Zafar
1
@AasmaZafar 这是一个很好的答案。你试过了吗?如果你能展示实现上传功能的代码会更好。 - wpclevel

2

这可能与.htaccess设置有关。.htaccess文件限制了你的操作。或者可能是文件之外的其他设置。你尝试在多台服务器上运行测试了吗?


2
这里提供一个可行的解决方案,与WordPress插件相关。请参考此链接
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;
}

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接