在wp.media框架中按ID显示附件

时间:2013-03-28 作者:Adal

我正在尝试使用新的wp。我正在构建的应用程序的媒体上传器框架。我读了很多关于其他问题、博客帖子等的文章。

我在下面粘贴的代码已经很好地工作了,甚至还做了一些额外的东西,以供参考,以防对任何人有用。

但我想对它做一个修改:当框架打开时,I want it to filter the "media library" display to only show attachment defined by a list of IDs that I provide.

这是我当前的代码:

// Uploading files
 var file_frame;

 $(\'.upload_attachments_button\').on(\'click\', function( event ){

event.preventDefault();

// If the media frame already exists, reopen it.
if ( file_frame ) {
  file_frame.open();
  return;
}

// Create the media frame.
file_frame = wp.media.frames.file_frame = wp.media({
  title: jQuery( this ).data( \'uploader_title\' ),
  button: { text: jQuery( this ).data( \'uploader_button_text\' ) },
  library : { type : \'image\' },
  multiple: true  // Set to true to allow multiple files to be selected
});

   // When frame is open, select existing image attachments from custom field
file_frame.on( \'open\', function() {

var selection = file_frame.state().get(\'selection\');
var attachment_ids = jQuery(\'#attachment_ids\').val().split(\',\');

// This is my attempt at showing only attachment with ID 275 --> but doesn\'t work!
file_frame.state().set( \'library\', media.query({ id: 275 }) );

attachment_ids.forEach(function(id) {
  attachment = wp.media.attachment(id);
  attachment.fetch();
  selection.add( attachment ? [ attachment ] : [] );
});
 });

  // When images are selected, place IDs in hidden custom field and show thumbnails.
file_frame.on( \'select\', function() {

var selection = file_frame.state().get(\'selection\');

// Place IDs in custom field
var attachment_ids = selection.map( function( attachment ) {
  attachment = attachment.toJSON();
  return attachment.id;
}).join();
if( attachment_ids.charAt(0) === \',\' ) { attachment_ids = attachment_ids.substring(1); }
$(\'#attachment_ids\').val( attachment_ids );


// Show Thumbs
var attachment_thumbs = selection.map( function( attachment ) {
  attachment = attachment.toJSON();
  if( attachment.id != \'\' ) { return \'<img src="\' + attachment.sizes.thumbnail.url + \'" id="id-\' + attachment.id + \'" />\'; }
}).join(\' \');
$(\'#images-feedback\').show();
$(\'#thumbs\').html(attachment_thumbs);

});

// Finally, open the modal
file_frame.open();
});


 // Place selected thumbnail ID into custom field to save as featured image 
 $(document).on(\'click\', \'#thumbs img\', function() {
 $(\'#thumbs img\').removeClass(\'chosen\');
 var thumb_ID = $(this).attr(\'id\').substring(3);
 $(\'#wpuf_featured_img\').val(thumb_ID);
 $(this).addClass(\'chosen\');
 });
我正在尝试过滤媒体库显示,如图所示,但未给出任何结果:

file_frame.state().set( \'library\', media.query({ id: 275 }) );
有人知道如何编写语法吗?

1 个回复
SO网友:montrealist

您始终可以在客户端进行筛选:

var query = wp.media.query();

query.filterWithIds = function(ids) {
    return _(this.models.filter(function(c) { return _.contains(ids, c.id); }));
};

var res = query.filterWithIds([6,87]); // change these to your IDs

res.each(function(v){
    console.log( v.toJSON() );
});
Disclaimer: 找到美丽的filterWithIds 中的函数this SO question.

结束