Фильтр инструментов загрузки WordPress 3.5+

я хотел бы использовать новый инструмент загрузки wp на странице личных страниц темы. Я нашел много учебников, таких как: wp media uploader в плагинах … и он работает очень хорошо. Но я хотел бы фильтровать тип файла, который конечный пользователь может выбрать (и просмотреть). Я нашел много примеров, которые используют этот способ для фильтрации по типу «образ» (параметр для объекта wp.media):

library:{ type:'image' } 

Здесь вы можете увидеть пример. Он работает, когда появляется панель загрузки, вы видите только изображения BUT:

  • Как я могу фильтровать другие типы файлов (документы, почтовые индексы, видео …), я пытался заменить «изображение» на «видео» или «документ», он не работает
  • Когда конечный пользователь хочет загрузить файл, он может загрузить любой тип файла вместо изображения

Как я могу это исправить? Как установить фильтр для одного или нескольких типов файлов?

Большое спасибо за помощь.

Параметр библиотеки фактически отвечает за то, что вы видите в библиотечном фрейме, а не за то, что вы можете загрузить. Он принимает: image , audio , video , file или любой другой тип mime, например, чтобы показать только pdf:

 library: { type: 'application/pdf' }, 

Теперь, чтобы фактически ограничить загрузку до типа файла, вам нужно добавить параметр к загрузчику и поймать этот параметр, используя wp_handle_upload_prefilter фильтра wp_handle_upload_prefilter .

Чтобы добавить параметр, используйте:

 file_frame.uploader.uploader.param( 'allowed_Type', 'pdf'); 

и для фильтрации типа файла используйте

 add_filter('wp_handle_upload_prefilter', 'Validate_upload_file_type'); function Validate_upload_file_type($file) { if (isset($_POST['allowed_Type']) && !empty($_POST['allowed_Type'])){ //this allows you to set multiple types seperated by a pipe "|" $allowed = explode("|", $_POST['allowed_Type']); $ext = substr(strrchr($file['name'],'.'),1); //first check if the user uploaded the right type if (!in_array($ext, (array)$allowed)){ $file['error'] = __("Sorry, you cannot upload this file type for this field."); return $file; } //check if the type is allowed at all by WordPress foreach (get_allowed_mime_types() as $key => $value) { if (strpos($key, $ext) || $key == $ext) return $file; } $file['error'] = __("Sorry, you cannot upload this file type for this field."); } return $file; } 

Просто небольшая модификация ответа Bainternet. Я использую WP 3.7.1, и что-то должно было измениться в Media Upload, поскольку эта строка не работает для меня:

file_frame.uploader.uploader.param( 'allowed_Type', 'pdf');

Следующая ошибка отображается в консоли Firebug при открытии загрузки мультимедиа:

 Uncaught TypeError: Cannot call method 'param' of undefined (anonymous function) x.event.dispatch v.handle 

Это сработало для меня:

file_frame.uploader.options.uploader['params']['allowed_type'] = 'pdf';