Предварительная выборка изображений при открытии медиа-менеджера WordPress 3.5

Я играл с новым медиа-менеджером в WordPress и немного повеселился, но дошел до того, что я ударяю головой о стену.

У меня есть настраиваемый мета-ящик, в который я хотел бы хранить некоторые изображения (ну, это скрытый ввод, и я в настоящее время храню их идентификаторы, но в равной степени могут быть объектами изображения), а затем делает вызов 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
}

Но я пробовал оба пути круглым и никуда не денусь.

Казалось бы, так как изменение "Featured Image" приведет вас к библиотеке с текущим выбранным - я просто не смог понять базовый код достаточно и надеюсь, что кто-то еще есть!

Ответ 1

После изучения ядра немного, ответ здесь довольно прост.

Слушайте открытое событие, захватите состояние, создайте объекты вложения с вашим идентификатором и добавьте их в выделение.

frame.on('open',function() {
  var selection = frame.state().get('selection');
  ids = jQuery('#my_field_id').val().split(',');
    ids.forEach(function(id) {
  attachment = wp.media.attachment(id);
  attachment.fetch();
  selection.add( attachment ? [ attachment ] : [] );
});
});

Это работает при выборе нескольких изображений, а также одиночных, и предполагает, что с использованием приведенного выше кода вы сохранили значения в одном текстовом/скрытом поле с разделением запятой.

Ответ 2

не настоящий ответ, но что-то, что я заметил

используя ваш код, frame.open( console.log('open') ) запускает console.log.
Другой frame.on('open', function() { console.log('on->open')}) не делает.

При просмотре страницы редактирования сообщения. (Если изображение уже установлено). Если вы откроете окно с изображением img, вам понадобятся несколько вещей.

  • WP выполняет 3 вызова ajax, 1-й и 3-й содержат признанный img id. второй - тот же, что и с вашим кодом.

  • когда всплывающее окно загружено, изображение будет видимым/загруженным перед остальными изображениями. Когда эти изображения отображаются, изображение отображается в правильном порядке.

  • При поиске в firebug на вкладке dom я обнаружил, что var wp.media.model.settings.post.featuredImageId содержит (дождаться) значение признанного изображения.

Надеюсь, это поможет вам каким-то образом.