Предварительная выборка изображений при открытии медиа-менеджера 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
содержит (дождаться) значение признанного изображения.
Надеюсь, это поможет вам каким-то образом.
Ответ 3
Я думаю, что этим парням это удается:
https://wordpress.stackexchange.com/info/76125/change-the-default-view-of-media-library-in-3-5/76213#76213
Но это не работает для меня.
Я получил jquery в нижнем колонтитуле моего сообщения/редактирования, сообщения/нового, но это просто не работает для меня: (