WordPress 3.5+上传工具筛选器

时间:2013-04-08 作者:Tyler

我想在个人主题选项页面中使用全新的wp上传工具。我找到了很多教程,如:wp media uploader in plugins...它工作得很好。但我想过滤最终用户可以选择(和查看)的文件类型。我发现了许多使用这种方式按“image”类型过滤的示例(wp.media对象的param):

library:{ type:\'image\' }
您可以看到一个示例here. 它可以工作,当上传器面板出现时,您只能看到图片,但:

如何过滤其他文件类型(文档、拉链、视频…),我试图用“视频”或“文档”替换“图像”它不起作用当最终用户选择上载文件时,他可以上载任何文件类型而不是图像,我如何修复?如何为一个或多个特定文件类型设置筛选器?

非常感谢你的帮助。

2 个回复
SO网友:Bainternet

library参数实际上负责在library框架中看到的内容,而不是可以上载的内容。它接受:image,audio,video,file 或任何其他mime类型,例如,仅显示pdf:

library: {
    type: \'application/pdf\'
},
现在,要将上载限制为文件类型,需要向上载程序添加一个参数,并使用wp_handle_upload_prefilter 过滤器挂钩。

要添加参数,请使用:

file_frame.uploader.uploader.param( \'allowed_Type\', \'pdf\');
要过滤文件类型,请使用

add_filter(\'wp_handle_upload_prefilter\', \'Validate_upload_file_type\');
function Validate_upload_file_type($file) {
    if (isset($_POST[\'allowed_Type\']) && !empty($_POST[\'allowed_Type\'])){
        //this allows you to set multiple types seperated by a pipe "|"
        $allowed = explode("|", $_POST[\'allowed_Type\']);

        $ext =  substr(strrchr($file[\'name\'],\'.\'),1);
        //first check if the user uploaded the right type
        if (!in_array($ext, (array)$allowed)){
            $file[\'error\'] = __("Sorry, you cannot upload this file type for this field.");
            return $file;
        }
        //check if the type is allowed at all by WordPress
        foreach (get_allowed_mime_types() as $key => $value) {
            if (strpos($key, $ext) || $key == $ext)
                return $file;
        }
        $file[\'error\'] = __("Sorry, you cannot upload this file type for this field.");
    }
    return $file;
}

SO网友:estepix

只是对班纳特的回答稍加修改。我正在使用WP 3.7.1,媒体上传中一定发生了一些变化,因为这一行似乎不适合我:

file_frame.uploader.uploader.param( \'allowed_Type\', \'pdf\');

打开媒体上载时,Firebug控制台中显示以下错误:

Uncaught TypeError: Cannot call method \'param\' of undefined
(anonymous function)
x.event.dispatch
v.handle
相反,这对我有效:

file_frame.uploader.options.uploader[\'params\'][\'allowed_type\'] = \'pdf\';

结束