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

时间:2012-12-18 15:22:26

标签: wordpress media

我一直在和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();
});

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

创建一个事件)
frame.on('open', function() {
  // Set selected images
}

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

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

3 个答案:

答案 0 :(得分:38)

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

侦听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] : []);
    });
  }
});

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

答案 1 :(得分:1)

不是真正的答案,而是我注意到的一些事情

使用您的代码,frame.open( console.log('open') )会触发console.log 另一个frame.on('open', function() { console.log('on->open')})没有。

查看帖子编辑页面时。 (已设置特色图像的位置)。 如果你打开特色img窗口,就会发生一些有趣的事情。

  1. WP执行3次ajax调用,第1次和第3次包含feature img id。第二个与您的代码相同。

  2. 加载弹出窗口时,在其余图像之前可见/加载特色图像。当那些显示特色图像时,按照正确的顺序排列。

  3. 在dom选项卡中查看firebug时,我发现var wp.media.model.settings.post.featuredImageId保持(等待)特色图像值。

  4. 希望这能以某种方式帮助你。

答案 2 :(得分:0)

我认为那些人设法做到了: https://wordpress.stackexchange.com/questions/76125/change-the-default-view-of-media-library-in-3-5/76213#76213 但这对我不起作用。 我的帖子/编辑页面中有jquery,post / new但是这对我不起作用:(