Aggiungi una voce di menu a Wordpress 3.5 Media Manager


34

Come si può aggiungere una nuova voce di menu sotto "Inserisci da URL" sulla barra laterale sinistra nel nuovo Media Manager 3.5 Media Manager?

Ho guardato la spina dorsale js e ho provato a collegarmi con la mia JS ma senza successo.

Modifica 2: questo sembra fare il trucco:

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

Dovrebbe fare per cose semplici, ma immagino sia anche possibile fare la stessa cosa in Javascript. Sarebbe bello se ci fosse un tutorial / spiegazione su come funzionano i nuovi interni di Media Manager.


cosa dovrebbe fare il tuo nuovo menu? L'aggiunta di una voce di menu non è il problema principale e sei sulla buona strada, ma se il tuo menu dovrebbe mostrare qualcosa di diverso dalle viste predefinite, solo con un'impostazione modificata, Backbone ha bisogno di una vista per la tua voce di menu ... e ecco dove sono bloccato anche io ...
ungestaltbar il

fare clic sulla voce di menu dovrebbe mostrare una vista diversa. Ottenere la voce di menu da mostrare sarebbe un primo passo
erezie,

1
Per quanto riguarda il mio bouny da 150 punti: cercando di continuare l'obiettivo del poster originale di utilizzare un metodo basato su JS per aggiungere una nuova voce di menu Stato sotto "Inserisci da URL" e associare una nuova vista nel modale multimediale principale dell'Editor post.
Scott Kingsley Clark,

@erezie, puoi segnare la risposta su questo come quella fornita da Fabien Quatravaux?
Scott Kingsley Clark,

Risposte:


19

OK, penso di avere qualcosa che è molto vicino per essere una risposta:

Ho messo il mio codice in breve

Ecco il risultato: screenshot del menu personalizzato

Ho costruito diversi oggetti Backbone per rispettare il modello MVC: controller.Customè incaricato di fare tutta la logica, i view.Toolbar.Customrapporti con i pulsanti della barra degli strumenti e la view.Customvisualizzazione dell'interfaccia utente interna.


2
Cosa manca finora?
Kaiser

+1 buon inizio! Sì, invece di dover implementare questo per sapere cosa fa, un'istantanea sarebbe molto utile . Inoltre, sposta quella riga di commento //build an empty view (needs more work)sul contenuto della risposta.
brasofilo,

Ho aggiunto uno screenshot per mostrare il risultato. La prossima cosa da fare ora è implementare la vista stessa che visualizzerà i componenti HTML e reagirà all'interazione dell'utente.
Fabien Quatravaux,

Sembra fantastico, è sicuramente un inizio! Degno della generosità così com'è, ma sentiti libero di portarlo al livello successivo se ne senti il ​​bisogno.
Scott Kingsley Clark,

Grazie per la generosità Scott! Scaverò sicuramente un po 'più a fondo perché ne ho bisogno per un progetto al lavoro. Riporterò qui il mio codice non appena sarà utilizzabile.
Fabien Quatravaux,

10

Sto lavorando per aggiungere un pulsante al "menu del router" (aggiungendo qualcosa a destra di "Libreria multimediale"), ma il sistema è lo stesso.

<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>

Ora, non fa ancora niente. Questo è il prossimo passo!


2
Qualche fortuna su questo? Una soluzione basata su JS è ciò che mi piacerebbe davvero vedere, non la soluzione PHP iframe già notata nella modifica del poster originale e un'altra risposta
Scott Kingsley Clark,

7

È possibile agganciare il media_upload_tabsfiltro per aggiungere la scheda. Questo è il metodo utilizzato dal plug-in 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' );

È quindi possibile agganciare media_upload_tab_slugall'azione (dove tab_slugviene utilizzato sopra) per visualizzare il contenuto della scheda:

function wpse_76980_media_upload() {
    // display tab contents
}
add_action( 'media_upload_tab_slug', 'wpse_76980_media_upload' );

2
Questo è il vecchio modo di aggiungere una scheda. Anche se funziona ancora, ma sospetto che WP si stia allontanando da esso.
Jenny il

2
@Jenny, penso che possiamo contare su questo filtro. Biglietto pertinente . (: oh, e +1, bel cecchino :)
brasofilo,

3

Non ho una soluzione, ma suggerimenti. Le stringhe ottengono da un array. Puoi filtrare tramite hook media_view_strings. La casella modale dopo il clic è un javascript, creato con backbone.js dal WP 3.5. Vedi /wp-includes/js/media-views.jsper una soluzione. Anche Backbone è nuovo per me e gli script hanno molte linee di origine.


È stato un suggerimento molto carino, ma penso che non sia all'altezza. Il media.view.settingsjs var può essere ottimizzato da un filtro php per aggiungere nuove schede, ma poi quelle schede sono rese tramite un iframe (vedi createIframeStatesmetodo in media-views.js).
Fabien Quatravaux,

Forse puoi aggiungere un tutorial, aggiungere al tuo blog oo per aggiungere un semplice link all'interno della vista multimediale e un'azione personalizzata al clic su questo link? La tua idea attuale è molto complessa e ha molte azioni personalizzate.
fusione

Sfortunatamente, non ho trovato un altro modo più semplice per raggiungere questo obiettivo. Questo codice sta eseguendo solo una cosa di base: aggiungere una voce di menu personalizzata a sinistra, con la propria vista del contenuto, barra degli strumenti e controller. Tutta questa costruzione è necessaria per creare le viste e il controller necessari per Backbone. Ma se hai una soluzione più semplice, sentiti libero di cambiare idea.
Fabien Quatravaux,

Sì, ho visto questo e anche testarlo, funziona bene. Ma penso che sia stato bello creare anche una sintesi solo per un pulsante o collegamento e una funzione di callback nella schermata multimediale predefinita, non una parte aggiuntiva, come nell'esempio.
fusione
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.