Как получить выбор из 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, но после полутора дней попыток я просто не могу найти другой путь.

Надеюсь, кто-то там знает, как сделать это правильно;)

Другие вопросы по тегам