仅更改插件上载的上载目录

时间:2013-05-28 作者:ahnkee

我花了很多时间阅读关于这个问题的其他线程,但我就是无法让我的代码正常运行。

我正在构建一个插件,并在我的自定义管理页面上设置了一个上载表单,我正在使用Media Uploader处理上载。请参见以下简化代码:

class myPlugin() {
  function __construct(){
    add_filter(\'wp_handle_upload_prefilter\', array( $this, \'handle_upload_prefilter\') );
    add_filter(\'wp_handle_upload\', array( $this, \'handle_upload\') );
  }

  function handle_upload_prefilter( $file ) {
    add_filter(\'upload_dir\', array( $this, \'custom_upload_dir\' ) );
    return $file;
  }

  function handle_upload( $fileinfo )   {
    remove_filter(\'upload_dir\', array( $this, \'custom_upload_dir\' ) );
    return $fileinfo;
  }

  function custom_upload_dir($args) {   
    $args[\'path\'] = $args[\'basedir\'] . "/mypath" . $args[\'subdir\'];
    $args[\'url\'] = $args[\'baseurl\'] . "/mypath" . $args[\'subdir\'];
    return $args;
  }
}
上面的代码可以工作,它将上载目录更改为我指定的路径。但是,它正在更改所有上载的上载目录。我希望我的代码仅在从自定义管理员页面上载时运行。

这是我迄今为止尝试过的(但对我来说并不奏效):

我试着用条件句来测试$pagenowget_current_screen 在我的custom_upload_dir 功能,但似乎每次都会失败,并使用默认上载路径__construct 但是我得到了一个错误(我想这在WP生命周期中还为时过早)

  • 尝试在我的handle_upload_prefilter 功能也无效
  • 1 个回复
    最合适的回答,由SO网友:s_ha_dum 整理而成

    表单数据必须有可识别的内容,例如输入名称。检查其中一个或多个,并进行相应的处理。

    function custom_upload_dir($args) {   
        if (isset($_POST[\'something\'])) {
            $args[\'path\'] = $args[\'basedir\'] . "/mypath" . $args[\'subdir\'];
            $args[\'url\'] = $args[\'baseurl\'] . "/mypath" . $args[\'subdir\'];
        }
        return $args;
    }
    
    经过一些调查,我发现唯一有帮助的是。。。

    post ID通过POST 将数据发送到回调。然而,我不知道这将被设置为在您的自定义插件页面

  • $_SERVER[\'HTTP_REFERER\'] 似乎设置正确。您可以对此进行分析,以确定您的插件页面是否是源页面
  • 结束