Intereting Posts
Импорт мультимедиа в CPT с помощью CLI & Filter Пользовательская таксономия Как правильно сгенерировать содержимое страницы из базы данных? Добавление дополнительных метафонов в зависимости от значения поля выбора Удалите всех подписчиков из wp_users и wp_usermeta несколько тысяч за раз Показать все сообщения из выбранного архивного месяца Два веб-сайта с той же административной панелью в WordPress Как получить доступ к функции извне класса в этом классе в плагине WP? Необходимо знать пользовательский код для отображения случайных и наиболее просматриваемых сообщений в сообщениях и страницах WordPress Не удается найти wp_footer () включенные скрипты Проверка WordPress & W3C CSS как открыть мой существующий сайт на маме В чем смысл User-agent и Disallow в файле robots.txt в wordpress Как создать настраиваемое поле в виджетах по умолчанию для worpdress? /% post_name% / или /% postname% / in Permalinks? Является ли Git / GitHub хорошим решением для развертывания WordPress?

Отключить вкладку библиотеки мультимедиа для не админов на экране загрузчика

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

Я попробовал следующее

function remove_medialibrary_tab($tabs) { if ( !current_user_can( 'administrator' ) ) { unset($tabs['library']); return $tabs; } else { return $tabs; } } add_filter('media_upload_tabs','remove_medialibrary_tab'); 

Но похоже, что этот фильтр устарел и больше не работает.

Solutions Collecting From Web of "Отключить вкладку библиотеки мультимедиа для не админов на экране загрузчика"

Эта функция не отображает вкладку библиотеки мультимедиа в окне загрузки

  function remove_medialibrary_tab($strings) { if ( !current_user_can( 'administrator' ) ) { unset($strings["mediaLibraryTitle"]); return $strings; } else { return $strings; } } add_filter('media_view_strings','remove_medialibrary_tab'); не  function remove_medialibrary_tab($strings) { if ( !current_user_can( 'administrator' ) ) { unset($strings["mediaLibraryTitle"]); return $strings; } else { return $strings; } } add_filter('media_view_strings','remove_medialibrary_tab'); 

Я узнал, что переключение на вкладку медиабиблиотеки фактически вызывает это приложение-запрос ajax-действия. Поэтому я добавил еще одну функцию обратного вызова для этого действия с главным приоритетом, который проверяет, не является ли пользователь администратором, действие останавливается прямо там. Это сделал трюк для меня 🙂

 function restrict_non_Admins(){ if(!current_user_can('administrator')){ exit; } } add_action('wp_ajax_query-attachments','restrict_non_Admins',1); add_action('wp_ajax_nopriv_query-attachments','restrict_non_Admins',1); 

Функция media_upload_tabs() не устарела. Он называется только the_media_upload_tabs() (идеальное имя, я знаю), которое также вызывается только один раз media_upload_header()

Изменить – просто протестировал фильтр с помощью плагина и, пока он работает, и var_dump( $tabs ) в подключенном var_dump( $tabs ) выплевывает вкладки, он ничего не делает. Причина в том, что все это теперь генерируется шаблонами основы и подчеркивания с помощью JavaScript. Файл, отвечающий за все шаблоны, – ~/wp-includes/media-template.php . Из поиска через него нет фильтра для изменения вывода. В основном это только одна массивная функция PHP с именем wp_print_media_templates() которая обертывает все шаблоны и имеет некоторые действия до и после разных шаблонов.

Я просто попробовал console.log() объект wp и нашел wp.media.view который, кажется, держит … что-то. ~/wp-includes/js/media-modals.js кажется, является корнем всего того, что сгенерированный JavaScript пользовательский интерфейс. Теперь, когда я копаю глубже, я нахожу wp.template который получает «подчеркивание – extend ed» в wp.media.template . Затем я нашел ссылку на ~/wp-includes/js/wp-util.js который затем объясняет, что аргумент для этой JS-функции является #id который префикс tmpl- .

Теперь это только оболочка для _.memoize() которая добавляет пользовательский обратный вызов «сохраняет» вычисленные результаты, чтобы «ускорить процесс» … немного. Содержимое представляет собой просто набор регулярных выражений, которые затем переходят к функции с именем compiled() , которая просто (снова) является оболочкой для

 _.template( $( '#tmpl-' + id ).html(), null, options ) 

.. ОК. Также есть вещи из ~/wp-includes/js/media-views.js и ~/wp-includes/js/media-models.js и, поскольку я почти ничего не знаю о Backbone, я не понял, как исходим оттуда. Я оставил свой отладочный плагин для этого ответа, а также ответ в качестве отправной точки для других здесь.

 <?php defined( 'ABSPATH' ) or exit; /** * Plugin Name: (#125669) Media Upload Tabs by role * Description: Removes media upload tabs on a by-role base. */ add_action( 'admin_footer', 'wpse125669MediaUploadTabsRemove', 0 ); function wpse125669MediaUploadTabsRemove() { if ( "edit.php" !== get_current_screen()->parent_file ) return; ?> <script type="text/javascript"> console.log( wp.media ); </script> <?php }