Додайте пункт меню до Wordpress 3.5 Media Manager


34

Як можна додати новий елемент меню під "Вставити з URL" на лівій бічній панелі в новому Менеджері Wordpress 3.5?

Я дивився на магістраль js і намагався прикласти свої зусилля, але без успіху.

Редагувати 2: Це, здається, робить трюк:

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

Це слід робити для простих речей, але я думаю, що це також можна зробити те ж саме в Javascript. Було б добре, якби був підручник / пояснення щодо того, як працює внутрішній медіа-менеджер.


що має зробити ваше нове меню? Додавання пункту меню не є основною проблемою, і ви перебуваєте на правильному шляху, але якщо ваше меню повинно відображати щось інше, ніж перегляди за замовчуванням, лише зі зміненими налаштуваннями, Backbone потребує перегляду пункту меню ... і ось там і я
застряг

натискання на пункт меню повинен показувати інший погляд. Показ пункту меню був би першим кроком
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 та реагуватиме на взаємодію користувачів.
Fabien Quatravaux

Це виглядає круто, це безумовно початок! Варта виграшності, як є, але сміливо перейдіть на наступний рівень, якщо відчуєте потребу.
Скотт Кінгслі Кларк

Дякую за щедрого Скотта! Я обов'язково копаю трохи глибше, бо мені це потрібно для проекту на роботі. Я опублікую свій код тут, як тільки він стане корисним.
Fabien Quatravaux

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>

Тепер це ще нічого не робить. Ось наступний крок!


2
Будь-яка удача з цього приводу? Рішення на базі JS - це те, що я дуже хотів би бачити, а не PHP-рішення iframe, яке вже зазначалося в оригінальній редакції афіші, та інша відповідь
Скотт Кінгслі Кларк

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
@Jenny, я думаю, ми можемо розраховувати на цей фільтр. Відповідний квиток . (: ой, і +1, приємний snipett :)
brasofilo

3

У мене немає рішення, але натякає. Рядки отримують з масиву. Ви можете фільтрувати через гачок media_view_strings. Модальне поле після клацання - це javascript, побудований з backbone.js з WP 3.5. Шукайте /wp-includes/js/media-views.jsрішення. Основа для мене також нова, і сценарії мають багато джерел.


Це був дуже приємний натяк, але я думаю, що це не вдається. media.view.settingsJS вар може бути змінений з допомогою PHP фільтра , щоб додати нові вкладки, але тоді ці виступи виявляються через фрейм (див createIframeStatesметод в media-views.js).
Fabien Quatravaux

Можливо, ви можете додати підручник, суть до свого блогу oo, щоб додати просте посилання всередині представлення медіа та користувацьку дію при натисканні на це посилання? Ваша нинішня суть дуже складна і має безліч спеціальних дій.
бульдж

На жаль, я не знайшов іншого простішого способу досягти цього. Цей код робить лише одне основне: додайте спеціальний елемент меню зліва, з його власним переглядом вмісту, панеллю інструментів та контролером. Вся ця конструкція потрібна для побудови виду та контролера, необхідних Backbone. Але якщо у вас є більш просте рішення, сміливо розпродайте мою суть.
Fabien Quatravaux

Так, я це бачив і теж тестую, працює чудово. Але я думаю, що було приємно, що ви створюєте також суть лише кнопки чи посилання та функцію зворотного виклику всередині екрана медіа за замовчуванням, а не додаткову частину, як у вашому прикладі.
бульге
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.