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

このようなことを試すことができます(複数選択の場合)...ただし、機能する保証はありません:

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

これが古いスレッドであることは知っていますが、複数のファイルをアップロードするときにすべての添付ファイル ID を取得するための Google 検索からこれに出くわしました。

完全に機能するAdalの答えを少し適応させます。

                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 に答える
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 に答える
0

わかりました、誰かがうまくいけばそれを適切に行う方法を投稿できるまで、これに対するハッキーな解決策があります...

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);
});

.details 領域にデータが入力されるまでにどれくらいの時間がかかるかわからないため、setTimeout のために理想的ではありませんが、1 日半試してみると、他の方法はうまくいきません。

うまくいけば、誰かがこれを正しく行う方法を知っています;)

于 2013-02-26T17:11:21.503 に答える