Добавить пункт меню в Wordpress 3.5 Media Manager

34

Как добавить новый пункт меню под «Вставить из URL» на левой боковой панели в новом Wordpress 3.5 Media Manager?

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

Редактировать 2: это, кажется, делает трюк:

http://sumtips.com/2012/12/add-remove-tab-wordpress-3-5-media-upload-page.html

Это должно быть сделано для простых вещей, но я думаю, также возможно сделать то же самое в Javascript. Было бы неплохо, если бы было учебное пособие / объяснение того, как работают новые внутренние медиа-менеджеры.

erezie
источник
что должно сделать ваше новое меню? Добавление пункта меню не является главной проблемой, и вы находитесь на правильном пути, но если предполагается, что ваше меню отображает что-то отличное от представлений по умолчанию, только с измененной настройкой, Backbone требуется представление для вашего пункта меню ... и вот где я тоже застрял ...
ungestaltbar
нажатие на пункт меню должно показывать другое представление. Получение пункта меню, которое будет отображаться, будет первым шагом
erezie
1
Что касается моего 150-балльного вознаграждения: хочу продолжить исходную цель автора использовать метод на основе JS, чтобы добавить новый пункт меню «Состояние» под «Вставить из URL» и связать новое представление в основном модальном медиа редактора сообщений.
Скотт Кингсли Кларк
@erezie, можешь ли ты отметить ответ на этот вопрос как предоставленный Фабьеном Куатраво?
Скотт Кингсли Кларк

Ответы:

19

Хорошо, я думаю, что у меня есть кое-что, что действительно близко, чтобы быть ответом:

Я положил свой код в суть

Вот результат: пользовательский скриншот меню

Я построил несколько объектов Backbone для соответствия шаблону MVC: controller.Customон отвечает за выполнение всей логики, view.Toolbar.Customимеет дело с кнопками панели инструментов и view.Customотображает внутренний интерфейс.

Фабьен Кватраво
источник
2
Чего пока не хватает?
Кайзер
+1 хорошее начало! Но да, вместо того, чтобы реализовывать это, чтобы знать, что он делает, снимок был бы очень полезен . А также перетащите эту строку комментариев //build an empty view (needs more work)к содержанию Ответа.
brasofilo
Я добавил скриншот, чтобы показать результат. Следующее, что нужно сделать сейчас, - это реализовать само представление, которое будет отображать компоненты HTML и реагировать на взаимодействие с пользователем.
Фабьен Кватраво
Это выглядит круто, это определенно начало! Достойна награды как есть, но не стесняйтесь переходить на следующий уровень, если чувствуете необходимость.
Скотт Кингсли Кларк
Спасибо за щедрость Скотт! Я определенно буду копать немного глубже, потому что мне это нужно для проекта на работе. Я опубликую свой код здесь, как только его можно будет использовать.
Фабьен Кватраво
10

Я работаю над добавлением кнопки в «меню маршрутизатора» (что-то справа от «Медиатека»), но система такая же.

<script type="text/javascript">
    jQuery(window).on('load', function() {
        var media   = window.wp.media,  
        Attachment  = media.model.Attachment,
        Attachments = media.model.Attachments,
        Query       = media.model.Query,
        l10n = media.view.l10n = typeof _wpMediaViewsL10n === 'undefined' ? {} : _wpMediaViewsL10n,
        NewMenuItem;

        jQuery(document).on( 'click', '.insert-media', function( event ) {
            var workflow = wp.media.editor.get();
            var options = workflow.options;
            if( undefined == NewMenuItem ) {
                NewMenuItem = new wp.media.view.RouterItem( _.extend( options, { text: 'New Item!' } ) );
                workflow.menu.view.views.set( '.media-menu', NewMenuItem, _.extend( options, { add: true } ) );
            }

        });
    });
</script>

Теперь это еще ничего не делает. Это следующий шаг!

Joost
источник
2
Удачи на этом? Я действительно хотел бы увидеть решение на основе JS, а не решение iframe PHP, уже отмеченное в редактировании оригинального плаката, и другой ответ
Скотт Кингсли Кларк
7

Вы можете подключиться к media_upload_tabsфильтру, чтобы добавить вкладку. Это метод, используемый плагином Network Shared Media :

function wpse_76980_add_upload_tab( $tabs ) {
    $newtab = array( 'tab_slug' => 'Tab Name' );
    return array_merge( $tabs, $newtab );
}
add_filter( 'media_upload_tabs', 'wpse_76980_add_upload_tab' );

Затем вы можете подключиться к media_upload_tab_slugдействию (где tab_slugиспользуется выше) для отображения содержимого вкладки:

function wpse_76980_media_upload() {
    // display tab contents
}
add_action( 'media_upload_tab_slug', 'wpse_76980_media_upload' );
карите
источник
2
Это старый способ добавления вкладки. Хотя он все еще работает, но я подозреваю, что WP отходит от него.
Дженни
2
@ Дженни, я думаю, мы можем рассчитывать на этот фильтр. Соответствующий билет . (: о, +1, хороший снипетт :)
brasofilo
3

У меня нет решения, но намеки. Строки получают из массива. Вы можете фильтровать через крючок media_view_strings. Модальное поле после щелчка - это javascript, сборка с backbone.js начиная с WP 3.5. Смотрите в /wp-includes/js/media-views.jsдля решения. Backbone также является новым для меня, и сценарии имеют много строк исходного кода.

bueltge
источник
Это был очень хороший намек, но я думаю, что он не справляется. media.view.settingsJS вар может быть изменен с помощью PHP фильтра , чтобы добавить новые вкладки, но тогда эти выступы оказываются через фрейм (см createIframeStatesметод в media-views.js).
Фабьен Кватраво
Может быть, вы можете добавить учебник, добавить в свой блог oo, чтобы добавить простую ссылку в медиа-представление и настраиваемое действие при нажатии на эту ссылку? Ваша текущая суть очень сложна и имеет множество пользовательских действий.
Bueltge
К сожалению, я не нашел другого более простого способа добиться этого. Этот код выполняет только одну основную вещь: добавляет пользовательский элемент меню слева с собственным представлением содержимого, панелью инструментов и контроллером. Вся эта конструкция необходима для построения представлений и контроллера, необходимых для Backbone. Но если у вас есть более простое решение, не стесняйтесь раскошелиться.
Фабьен Кватраво
Да, я видел это, а также проверить это, отлично работает. Но я думаю, что было бы хорошо, что вы создаете также суть только для кнопки или ссылки и функции обратного вызова внутри экрана мультимедиа по умолчанию, а не дополнительной части, как в вашем примере.
Bueltge