2

我正在尝试从新媒体上传器的默认实例中获取选择...

我对它默认显示的方式很满意,所以我不使用:-

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

4 回答 4

1

改编自这里的答案: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;
      }
   });
})();
于 2013-06-11T02:04:36.717 回答
1

你可以尝试这样的事情(对于多选)......但不能保证它有效:

var selection = wp.media.editor.state().get('selection');

var attachment_ids = selection.map( function( attachment ) {
  attachment = attachment.toJSON();
  return attachment.id;
}).join();
于 2013-03-21T00:26:15.087 回答
1

我知道这是一个旧线程,但我在 Google 搜索中偶然发现了这一点,以在上传多个文件时获取所有附件 ID。

我稍微改编了阿达尔的回答,效果很好:

                var selection = wp.media.state().get('selection');

                var attachment_ids = selection.map( function( attachment ) {
                    attachment = attachment.toJSON();
                    return attachment.id;
                }).join();

只是将其添加为参考,因为当时 Adal 没有得到关于答案的反馈(而且我还没有足够的声誉来发表评论)。

于 2016-08-05T09:15:52.800 回答
0

好的,我有一个 hacky 解决方案,直到有人希望可以发布如何正确地做到这一点......

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 区域需要多长时间,但经过一天半的尝试,我无法解决任何其他问题。

希望有人知道如何正确地做到这一点;)

于 2013-02-26T17:11:21.503 回答