この質問がSOで数回質問されたのを見たことがありますが、返答がありません。
私はメタ要素として投稿へのアップロードを保存するために使用しているwp.mediaオブジェクト(アップロードダイアログ)を持っています。アップロード時にul.attachmentsフレームが更新されないことを除けば、うまく機能します。スクリーンショットを参照してください。
新しいファイル(スクリーンショットの例ではpdf.pdf)を表示するには、ページを手動で更新する必要があります。
ファイルリストフレームのビューをフックして再レンダリングできるアップロード済みのイベントはありますか?
ありがとう。
編集:問題を説明できるように、コードを抽象化しました。 N.B.これは非常に悪い習慣を使っていますが、抽象化する最も簡単な方法でした。
問題を再現する手順
私はあなたがすでにこれを修正したと思いますが、(賞金を削減するための露骨な試みで)コメントで述べたように、あなたのmyplugin_meta_box_callback()
関数で行を変更する簡単な修正があります
$mime_types = array( 'application/pdf' );
に
$mime_types = 'application/pdf';
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
のような添付ファイルタイプは "media.php"のwp_prepare_attachment_for_js()
によってタイプとサブタイプに分割されていることで、これは検証タイプ、つまりapplication
だけです。区切り文字なし).
とにかく、 アップロードバリデータ @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
フィルタは、選択フィルタのテキストを "All media items"から "All PDF items"に変更するだけです。その後、(@ estepixで新しい方法で)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以外のファイルはアップロードできません。