Предварительно выбирайте изображения при открытии менеджера мультимедиа 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" приведет вас в библиотеку с выбранным текущим - я просто пока не смог достаточно понять базовый код и надеюсь, что кто-то еще есть!

3 ответа

Решение

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

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

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

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

не реальный ответ, но кое-что, что я заметил

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

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

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

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

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

Надеется, что это поможет вам в некотором роде.

Думаю, этим парням это удастся сделать: https://wordpress.stackexchange.com/questions/76125/change-the-default-view-of-media-library-in-3-5/76213 Но это не так я не работаю Я получил jquery в нижнем колонтитуле моего сообщения / редактирования, публикации / нового, но это просто не работает для меня:(

Другие вопросы по тегам