Ho cercato il codice sorgente per un motivo simile; Vorrei aggiungere le "Impostazioni di visualizzazione degli allegati" al frame "select" predefinito. Per quanto ne so, questo non può essere fatto passando i parametri a wp.media (), come vorremmo tutti. wp.media attualmente ha i due frame ("post" e "select") e le viste che li accompagnano sono preimpostate.
L'approccio che sto guardando ora è quello di estendere media.view.mediaFrame per creare un nuovo frame (basato sul frame "select") che includa le parti della vista di cui ho bisogno. Se riesco a farlo funzionare, posterò il codice.
MODIFICARE:
Ian, ho ottenuto la funzione che volevo lavorare e ho impiegato del tempo per capire il tuo. wp.media () non è così modulare come potrebbe essere. Accetta solo i valori 'select' e 'post' per frame, con 'select' come predefinito, quindi non puoi creare un nuovo oggetto frame. Invece, è necessario estendere uno dei due oggetti frame (tutto ciò è in /wp-includes/js/media-views.js), che è anche un po 'goffo. L'aggiunta di parte dell'interfaccia utente è un processo in più passaggi. Potresti iniziare con Seleziona e aggiungi, ma per il tuo ho scelto di iniziare con il codice nel frame Post e portare via la galleria. Ecco il mio codice, funzionante ma non pesantemente testato. Probabilmente anche un po 'di spazio per razionalizzare.
wp.media.view.MediaFrame.Select = wp.media.view.MediaFrame.Select.extend({
initialize: function() {
wp.media.view.MediaFrame.prototype.initialize.apply( this, arguments );
_.defaults( this.options, {
multiple: true,
editing: false,
state: 'insert'
});
this.createSelection();
this.createStates();
this.bindHandlers();
this.createIframeStates();
},
createStates: function() {
var options = this.options;
// Add the default states.
this.states.add([
// Main states.
new wp.media.controller.Library({
id: 'insert',
title: 'Insert Media',
priority: 20,
toolbar: 'main-insert',
filterable: 'image',
library: wp.media.query( options.library ),
multiple: options.multiple ? 'reset' : false,
editable: true,
// If the user isn't allowed to edit fields,
// can they still edit it locally?
allowLocalEdits: true,
// Show the attachment display settings.
displaySettings: true,
// Update user settings when users adjust the
// attachment display settings.
displayUserSettings: true
}),
// Embed states.
new wp.media.controller.Embed(),
]);
if ( wp.media.view.settings.post.featuredImageId ) {
this.states.add( new wp.media.controller.FeaturedImage() );
}
},
bindHandlers: function() {
// from Select
this.on( 'router:create:browse', this.createRouter, this );
this.on( 'router:render:browse', this.browseRouter, this );
this.on( 'content:create:browse', this.browseContent, this );
this.on( 'content:render:upload', this.uploadContent, this );
this.on( 'toolbar:create:select', this.createSelectToolbar, this );
//
this.on( 'menu:create:gallery', this.createMenu, this );
this.on( 'toolbar:create:main-insert', this.createToolbar, this );
this.on( 'toolbar:create:main-gallery', this.createToolbar, this );
this.on( 'toolbar:create:featured-image', this.featuredImageToolbar, this );
this.on( 'toolbar:create:main-embed', this.mainEmbedToolbar, this );
var handlers = {
menu: {
'default': 'mainMenu'
},
content: {
'embed': 'embedContent',
'edit-selection': 'editSelectionContent'
},
toolbar: {
'main-insert': 'mainInsertToolbar'
}
};
_.each( handlers, function( regionHandlers, region ) {
_.each( regionHandlers, function( callback, handler ) {
this.on( region + ':render:' + handler, this[ callback ], this );
}, this );
}, this );
},
// Menus
mainMenu: function( view ) {
view.set({
'library-separator': new wp.media.View({
className: 'separator',
priority: 100
})
});
},
// Content
embedContent: function() {
var view = new wp.media.view.Embed({
controller: this,
model: this.state()
}).render();
this.content.set( view );
view.url.focus();
},
editSelectionContent: function() {
var state = this.state(),
selection = state.get('selection'),
view;
view = new wp.media.view.AttachmentsBrowser({
controller: this,
collection: selection,
selection: selection,
model: state,
sortable: true,
search: false,
dragInfo: true,
AttachmentView: wp.media.view.Attachment.EditSelection
}).render();
view.toolbar.set( 'backToLibrary', {
text: 'Return to Library',
priority: -100,
click: function() {
this.controller.content.mode('browse');
}
});
// Browse our library of attachments.
this.content.set( view );
},
// Toolbars
selectionStatusToolbar: function( view ) {
var editable = this.state().get('editable');
view.set( 'selection', new wp.media.view.Selection({
controller: this,
collection: this.state().get('selection'),
priority: -40,
// If the selection is editable, pass the callback to
// switch the content mode.
editable: editable && function() {
this.controller.content.mode('edit-selection');
}
}).render() );
},
mainInsertToolbar: function( view ) {
var controller = this;
this.selectionStatusToolbar( view );
view.set( 'insert', {
style: 'primary',
priority: 80,
text: 'Select Image',
requires: { selection: true },
click: function() {
var state = controller.state(),
selection = state.get('selection');
controller.close();
state.trigger( 'insert', selection ).reset();
}
});
},
featuredImageToolbar: function( toolbar ) {
this.createSelectToolbar( toolbar, {
text: 'Set Featured Image',
state: this.options.state || 'upload'
});
},
mainEmbedToolbar: function( toolbar ) {
toolbar.view = new wp.media.view.Toolbar.Embed({
controller: this,
text: 'Insert Image'
});
}
});
Questo combina il codice di wp.media.view.MediaFrame.Post con quello di media.view.MediaFrame.Select, adattandosi al fatto che questo viene eseguito al di fuori dell'ambito originale. I valori per il testo sono i vari pulsanti e, se lo si desidera, è possibile fare riferimento al proprio oggetto di localizzazione. Il valore 'filtrabile' nel costruttore Libreria (in createStates ()) determina quali tipi di media saranno supportati.
Dopo aver esteso l'oggetto Seleziona con questo approccio, basta istanziarlo nello stesso modo in cui ci si trova attualmente e aggiungere il gestore personalizzato per quando si seleziona un'immagine. L'Insert from Url potrebbe generare un evento diverso rispetto a quando si preleva dal supporto caricato. Probabilmente sarebbe meglio istanziare prima il frame, in realtà, e quindi estenderlo, in modo che qualsiasi altro frame multimediale sulla pagina rimanga inalterato, ma non ho provato questo.
Spero possa aiutare-