Как получить выбор из WordPress 3.5 Media Uploader
Я пытаюсь получить выбор из экземпляра по умолчанию для нового загрузчика мультимедиа...
Я доволен тем, как он отображается по умолчанию, поэтому я не использую:-
file_frame = wp.media.frames.file_frame = wp.media(
{
title: 'Select File',
button: {
text: jQuery( this ).data( 'uploader_button_text' )
},
multiple: false
});
Просто
wp.media.editor.open();
так что это не работает, очевидно,
attachment = file_frame.state().get('selection').first().toJSON();
но не делает этого
wp.media.editor.state().get('selection').first().toJSON();
или это
wp.media.state().get('selection').first().toJSON();
так какой код я должен использовать?
4 ответа
Вы можете попробовать что-то вроде этого (для множественного выбора)... хотя нет гарантии, что это работает:
var selection = wp.media.editor.state().get('selection');
var attachment_ids = selection.map( function( attachment ) {
attachment = attachment.toJSON();
return attachment.id;
}).join();
Я знаю, что это старая ветка, но я наткнулся на это из поиска Google для получения всех идентификаторов вложений при загрузке нескольких файлов.
Я слегка адаптирую ответ Адала, который отлично работает:
var selection = wp.media.state().get('selection');
var attachment_ids = selection.map( function( attachment ) {
attachment = attachment.toJSON();
return attachment.id;
}).join();
Просто добавив это в качестве ссылки, так как тогда Adal не получил отзывов об ответе (и у меня пока недостаточно репутации, чтобы оставлять комментарии).
Адаптация ответа отсюда: https://wordpress.stackexchange.com/questions/87357/wordpress-media-manager-3-5-default-link-to
Расширение render
функция wp.media.view.Settings.AttachmentDisplay
, который затем дает доступ к this.controller.state().get('selection')
:
function($) {
var _AttachmentDisplay = wp.media.view.Settings.AttachmentDisplay;
wp.media.view.Settings.AttachmentDisplay = _AttachmentDisplay.extend({
render: function() {
_AttachmentDisplay.prototype.render.apply(this, arguments);
selection = this.controller.state().get('selection').first().toJSON();
//now, for example:
filename = selection.filename;
}
});
})();
Хорошо, у меня есть хакерское решение, пока кто-то, надеюсь, не сможет опубликовать, как это сделать правильно...
jQuery('.media-modal .type-image').on('click',function(index, element) {
var thisCollection = wp.media.model.Query.all._byCid;
setTimeout(function() { //we need this becuse the details area is not generated until after the click
var thisEditUrl = jQuery('.details .edit-attachment').attr('href');
var attachId = thisEditUrl.match(/post=([^&]+)/)[1];
var attachmentAtts = '';
jQuery.each(thisCollection, function(index,item) {
if(this.id == attachId)
attachmentAtts = this.attributes;
});
},500);
});
Он не идеален из-за setTimeout, так как мы не знаем, сколько времени займет заполнение области.details, но после полутора дней попыток я просто не могу найти другой путь.
Надеюсь, кто-то там знает, как сделать это правильно;)