wp.media js — как отключить вкладку «Загрузка файла»
Когда нужно использовать медиатеку WordPress (окно Медиатеки) в качестве средства для выбора картинки из медиатеки и только для этого, вкладка загрузки файлов «Upload Files» не нужна, более того, в некоторых случаях она может мешать логике кода, потому что позволяет загружать файл в медиатеку.
Чтобы было понятнее о чем речь, приведу пример. У нас есть форма в которой файлы загружаются в медиатеку нестандартно, но также в этой форме нам нужно иметь возможность выбрать и установить какую-либо уже загруженную в медиатеку картинку. В этом случае вкладка загрузки картинки через стандартное окно медиатеки нам не нужна: она будет мешать, потому что ломать логику загрузки картинок.
Как отключить вкладку загрузки картинок в медиатеку WordPress?
Сделать это можно изменить дефолтную опцию router прямо перед вызовом фрейма wp.media. В этой опции мы указываем метод (анонимную функцию), которая устанавливает вкладки (роуты).
Так как нам нужна одна вкладка, то указываем только её — browse: {} — без параметров (в параметрах указывается название вкладки и приоритет. Вкладка у нас одна, поэтому ничего из этого нам не нужно).
Речь идет о таком коде:
wp.media.controller.Library.prototype.defaults.router = function( routerView ) {
routerView.set({
browse: {}
})
}
Весь код, чтобы понимать контекст где используется приведенный кусок кода:
(function($){
$('.loadimage-wrap').each(function(){
let frame
let $wrap = $(this)
let $img = $wrap.find('img')
let $input = $wrap.find('input[type="hidden"]')
$wrap.on( 'click', '.select-media-btn', function(){
// отключим таб Upload Files
// оставим только возможность выбора картинок
// за доп.инфо см. метод `browseRouter` в `wp-includes/js/media-views.js`
wp.media.controller.Library.prototype.defaults.router = function( routerView ) {
routerView.set({
browse: {}
})
}
// создаем и показываем фрейм
frame = wp.media.frames.kmbframe = wp.media({
title : 'Select Media',
// Library WordPress query arguments.
library : {
type : 'image'
},
multiple: false,
button: {
text: 'Select'
}
})
frame.on( 'select', function() {
attachment = frame.state().get('selection').first().toJSON();
$img.attr( 'src', attachment.url );
$wrap.data('usetype') === 'url' ? $input.val( attachment.url ) : $input.val( attachment.id );
});
frame.on( 'open', function(){
if( $input.val() )
frame.state().get('selection').add( wp.media.attachment( $input.val() ) );
});
frame.open();
})
})
})(jQuery)
В результате получим:
Вообще, скрипт медиатеки огромен и разобраться в нем довольно сложно, порой изменение мелкой детали может занять море времени.

