我花了很多时间阅读关于这个问题的其他线程,但我就是无法让我的代码正常运行。
我正在构建一个插件,并在我的自定义管理页面上设置了一个上载表单,我正在使用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;
}
}
上面的代码可以工作,它将上载目录更改为我指定的路径。但是,它正在更改所有上载的上载目录。我希望我的代码仅在从自定义管理员页面上载时运行。
这是我迄今为止尝试过的(但对我来说并不奏效):
我试着用条件句来测试$pagenow
和get_current_screen
在我的custom_upload_dir
功能,但似乎每次都会失败,并使用默认上载路径我在我的__construct
但是我得到了一个错误(我想这在WP生命周期中还为时过早)
尝试在我的handle_upload_prefilter
功能也无效
最合适的回答,由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\']
似乎设置正确。您可以对此进行分析,以确定您的插件页面是否是源页面如果我有完整的插件源代码,我可以做一些测试。