在wp.media对象中呈现上载的文件

时间:2014-12-18 作者:setterGetter

这个问题我已经被问了好几次了,我没有看到任何回应。

我有一个wp。媒体对象(上传对话框),我在中使用它将上传到帖子的内容存储为元元素。它工作正常,除了ul。上传时附件框架未刷新,请参见屏幕截图

ul.attachments frame

我必须手动刷新页面才能显示新文件(在我的截图示例中为pdf.pdf)。

是否有上载的事件可以挂接到文件列表框架并重新渲染视图?

谢谢

EDIT: I abstracted out the code so that I can demonstrate the issue. N.B. this is using extremely bad practices, but it was the easiest way to abstract.

复制问题的步骤:

下降https://gist.github.com/matgargano/36e76cf4bb2b55e88981 进入主题并将其包含进去。要添加帖子,请单击最底部元框中的“设置pdf”,拖放pdf,注意左侧面板不会刷新帖子创建/编辑页面,然后单击“设置pdf”,然后看到面板按预期显示(pdf列在左侧)。***目标是在步骤3中刷新左侧面板

1 个回复
最合适的回答,由SO网友:bonger 整理而成

我想你已经解决了这个问题,但是(公然试图骗取赏金)正如评论中提到的,有一个简单的解决方法,在你的myplugin_meta_box_callback() 功能更改行

$mime_types      = array( \'application/pdf\' );

$mime_types      = \'application/pdf\';
Thelibrary.type 选项到wp.media 应为字符串(可以用其他类型逗号分隔),而不是数组。

这实际上在media.model.Attachments 因为如果你看看它失败的地方,验证器type() 过滤器(“media models.js”中的第997行)

        type: function( attachment ) {
            var type = this.props.get(\'type\');
            return ! type || -1 !== type.indexOf( attachment.get(\'type\') );
        },
那么这没有考虑的是一种附件类型application/pdf 分为类型和子类型wp_prepare_attachment_for_js() 在“media.php”中,这只是验证类型,即application (也以一种非常草率的方式进行验证,没有分隔符)。

不管怎样,如果你加上upload validator 由@Bainternet给出-这里是它的一个变体:

add_action( \'admin_init\', function () {
    add_filter( \'wp_handle_upload_prefilter\', function ( $file ) {
        if ( empty( $_POST[\'allowed_mime_types\'] ) || empty( $file[\'type\'] ) ) {
            return $file;
        }
        $allowed_mime_types = explode( \',\', $_POST[\'allowed_mime_types\'] );
        if ( in_array( $file[\'type\'], $allowed_mime_types ) ) {
            return $file;
        }
        // Cater for "group" allowed mime types eg "image", "audio" etc. to match
        // files of type "image/png", "audio/mp3" etc.
        if ( ( $slash_pos = strpos( $file[\'type\'], \'/\' ) ) > 0 ) {
            if ( in_array( substr( $file[\'type\'], 0, $slash_pos ), $allowed_mime_types ) ) {
                return $file;
            }
        }
        $file[\'error\'] = __( \'Sorry, you cannot upload this file type for this field.\' );
        return $file;
    } );

    add_filter( \'media_view_settings\', function ( $settings, $post ) {
        $settings[\'mimeTypes\'][\'application/pdf\'] = __( \'All PDF items\' );
        return $settings;
    }, 10, 2 );
} );
(附加media_view_settings 过滤器只需将选择过滤器文本从“所有媒体项目”更改为“所有PDF项目”。)然后可以设置allowed_mime_types 在您的openModal() 调用后直接调用函数wp.media()

                this.modal = wp.media.frames.file_frame = wp.media(options);
                if (options.library && options.library.type && this.modal.uploader) {
                    this.modal.uploader.options.uploader.params.allowed_mime_types = options.library.type;
                }
不允许上传非PDF文件。

结束

相关推荐

拒绝使用Media Uploader上传大小错误的图像

我正在进行一项超级严格的设置,以便在后期编辑屏幕中向自定义字段添加图像。我的最佳方案是,当用户尝试为特定自定义值上载错误大小的图像时,添加一条自定义错误消息。我知道我可以用任何自定义上传器来实现这一点,但我更喜欢用常规媒体上传器。我也知道wp_handle_upload_prefilter 我已经使用它来验证文件名,并根据一般要求生成自定义错误消息。我现在需要的是一种使用自定义需求的方法,根据上载到的字段拒绝上载。我也知道Differentiate Featured Image from Post Ima