我想你已经解决了这个问题,但是(公然试图骗取赏金)正如评论中提到的,有一个简单的解决方法,在你的myplugin_meta_box_callback()
功能更改行
$mime_types = array( \'application/pdf\' );
至
$mime_types = \'application/pdf\';
The
library.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文件。