2013-07-04 3 views
9

Я создаю тему WordPress с настраиваемой страницей настроек. Некоторые из настроек требуют, чтобы пользователь загружал/добавлял набор изображений (более 1). Поведение загрузчика мультимедиа по умолчанию - это загрузка и/или выбор одного изображения и вставка его в сообщение.WordPress 3.5 Media Uploader Несколько файлов Выберите

Я использовал this excellent guide при использовании медиа-загрузчика, и это говорит о том, что я должен иметь возможность устанавливать несколько значений в true, но он по-прежнему позволяет только загружать или выбирать один файл.

Вот мой код:

нагрузки в необходимых скриптах, так как это страница пользовательских настроек:

if(function_exists('wp_enqueue_media')){ 
    wp_enqueue_media(); 
}else{ 
    wp_enqueue_style('thickbox'); 
    wp_enqueue_script('media-upload'); 
    wp_enqueue_script('thickbox'); 
} 

Javascript/Jquery Для отображения медиа-загрузчика и обработок выбранных изображений:

var tgm_media_frame; 

$('.upload-images').click(function() { 

    if (tgm_media_frame) { 
    tgm_media_frame.open(); 
    return; 
    } 

    tgm_media_frame = wp.media.frames.tgm_media_frame = wp.media({ 
    multiple: true, 
    library: { 
     type: 'image' 
    }, 
    }); 

    tgm_media_frame.on('select', function(){ 
    var selection = tgm_media_frame.state().get('selection'); 
    selection.map(function(attachment) { 
     attachment = attachment.toJSON(); 
      console.log(attachment); 
      // Do something with attachment.id and/or attachment.url here 
    }); 
    }); 

    tgm_media_frame.open(); 

}); 

Может ли кто-нибудь получить правильный выбор файлов? Я что-то упускаю? Благодаря!

ответ

11

Update

Я думаю, что средства массовой информации загрузчик был обновлен, поскольку вопрос задает и ответил. Я предполагаю, что в предыдущей версии опции wordpress multiple: 'add' нет, как было предложено другими пользователями. Я не уверен.


Все хорошо с вашим кодом. Просто небольшая часть отсутствует.

selection.map(function(attachment) { 
    attachment = attachment.toJSON(); 
    $("#something").after("<img src=" +attachment.url+">"); 
}); 

После attachment конвертированы toJSON вы можете использовать его, как указано в документации. Вы можете размещать URL-адреса изображений в некоторых скрытых полях, отправляемых на сервер, и отображать выбранные изображения пользователю одновременно.

Просто небольшая вещь, я чувствую себя странно, что нам нужно нажать Ctrl +CLICK для выбора изображений. Это должны быть скорее флажки или что-то еще.


обновление

Ctrl + нажмите или сдвиг + нажмите для выбора нескольких изображений путь WordPress дал. Для более близкого взгляда, открытая

... \ в.ч.-включает в себя \ JS \ медиа-views.js

Там есть функция, определенная - toggleSelectionHandler. Он прослушивает нажатие клавиши комбинации, и, соответственно, вызывает другую функцию, которая изменяет определенные классы и вызывает фактический выбор.

После осмотра в firbug, вы можете увидеть два класса применяется -

  1. selected
  2. details

details класс определяет стили для текущего щелкнутого/активного выбора (с синей толстой границей) и selected фактически отмечает изображение как выбранное и возвращает его в Выбор массив.

Вы можете изменить это поведение либо из этого файла, либо написать свою собственную функцию для обработки выбора. Однако первый подход не очень хорош.

PS: Wordpress фактически не использует вышеуказанный файл. Он выбирает сжатую версию того же файла. Таким образом, вы можете загрузить несжатый файл и поиграть. Вы можете заставить WordPress использовать несжатые JS файлы, установив

define('SCRIPT_DEBUG', true); 

в wp-config.php. Это пропустит поведение load-scripts.php (загрузка сжатого версии каждого js-файла в один файл путем их слияния).

+0

Спасибо за информацию SachinG, я понятия не имел, что вам нужно было нажать Shift + щелчок, чтобы выбрать несколько изображений в медиа-загрузчике. У меня уже есть код, реализованный вместо «DO something», который работает, когда я выбираю несколько изображений. Я просто хочу, чтобы людям не пришлось сдерживать смену и нажимать, чтобы сделать это! Угадайте, тогда нет другого пути? – Cory

+0

@Cory см. Обновленный ответ. – SachinGutte

+0

Можем ли мы увидеть версию, не связанную с модификацией файлов WP Core? –

1

В случае, если кто-то хочет знать, как это сделать, одним из способов является это. Обратите внимание, что он полностью переопределит поведение по умолчанию в пределах области реализации.

wp.media.view.Attachment.prototype.toggleSelectionHandler = function(event) { 
    var method = 'between'; 
    if (event.shiftKey) { 
     method = 'between'; 
    } else { 
     method = 'toggle'; 
    } 

    this.toggleSelection({ 
     method: method 
    }); 
}; 

Если multiple установлен в true то это позволит вам выбрать несколько элементов, как на экране галереи.

+0

Просто одно слово - «Совершенно!» –

11

Вам необходимо изменить multiple:true на multiple:'add'. Именно так работает Default Gallery.

+2

Это просто правильный ответ. 'multiple:" toggle "' тоже может представлять интерес. – lukkysam

+0

Это правильный ответ ! –

+0

Я думаю, что медиа-загрузчик был обновлен, так как задан вопрос и ответил. Я думаю, этот вариант не присутствовал в предыдущей версии словарей. – SachinGutte

Смежные вопросы