打开WordPress 3.5媒体管理器时预先选择图像

Mar*_*ark 27 media wordpress

我一直在和WordPress的新媒体经理一起玩,并且玩得很开心,但已经达到了我的头撞墙的程度.

我有一个自定义元框,我想存储一些图像(这是一个隐藏的输入,我现在正在存储他们的ID,但可能同样是图像对象),然后进行AJAX调用以显示一些缩略图,我随后使其可拖动,以便用户可以重新排序(不一定只是一些背景相关).

我的问题是,当我打开媒体管理器时,没有选择图像,所以如果用户想要编辑图库中的图片,他们需要再次选择它们.

我想弄清楚的是,如何打开媒体管理器,当前图像通过,所以它们是预先选定的.

所以,广泛地说,我的代码看起来像这样

jQuery('#myButton').click(function(e) {
  e.preventDefault();
  frame = wp.media({
    title : 'My Gallery Title',
    multiple : true,
    library : { type : 'image'},
    button : { text : 'Insert' },
  });
  frame.on('close',function() {
    // get selections and save to hidden input plus other AJAX stuff etc.
  }
  frame.open();
});
Run Code Online (Sandbox Code Playgroud)

我的想法是必须有一个参数传递到帧中(可能是图像的JSON对象,或者我需要创建一个事件

frame.on('open', function() {
  // Set selected images
}
Run Code Online (Sandbox Code Playgroud)

但是我已经尝试了两种方式而且没有到达任何地方.

这似乎是可能的,因为更改"特色图像"会将您带到库中并选择当前的库 - 我刚刚无法完全理解核心代码并希望其他人拥有!

Mar*_*ark 41

在研究了核心之后,这里的答案非常简单.

侦听对象的打开事件wp.media,获取状态,使用您的id创建附件对象并将其添加到选择中.

frame.on('open',function() {
  var selection = frame.state().get('selection');
  var ids_value = jQuery('#my_field_id').val();

  if(ids_value.length > 0) {
    var ids = ids_value.split(',');

    ids.forEach(function(id) {
      attachment = wp.media.attachment(id);
      attachment.fetch();
      selection.add(attachment ? [attachment] : []);
    });
  }
});
Run Code Online (Sandbox Code Playgroud)

这在选择多个图像以及单个图像时有效,并假设使用上面的代码将值存储在单个文本/隐藏字段中,并使用逗号分隔.