28

我一直在玩 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
}

但我已经尝试了两种方式,但没有得到任何结果。

这似乎是可能的,因为更改“精选图像”会将您带到选择当前图像的库 - 我还无法充分理解核心代码,希望其他人也有!

4

3 回答 3

43

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

侦听对象的打开事件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] : []);
    });
  }
});

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

于 2012-12-20T00:11:27.833 回答
1

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

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

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

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

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

  3. 在 dom 选项卡上查看 firebug 时,我发现 varwp.media.model.settings.post.featuredImageId保存(等待它)特色图像值。

希望这对您有所帮助。

于 2012-12-19T09:25:55.140 回答
0

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

于 2012-12-19T15:58:32.127 回答