Предварительно выбирайте изображения при открытии менеджера мультимедиа 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, произойдет несколько интересных вещей.
WP выполняет 3 вызова ajax, 1-й и 3-й содержат выделенный идентификатор img. 2-й такой же, как с вашим кодом.
когда всплывающее окно загружено, выбранное изображение видно / загружается раньше остальных изображений. Когда они появляются, показанное изображение размещается в правильном порядке.
Посмотрев в 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 в нижнем колонтитуле моего сообщения / редактирования, публикации / нового, но это просто не работает для меня:(