J'essaie d'étendre le média modal, mais je ne trouve pas de documentation/tutoriels à ce sujet. Je ne suis pas un maître de la colonne vertébrale aussi ;-)
Je souhaite ajouter une zone de sélection pour chaque taxonomie attachée au type de publication en pièce jointe. Pour le moment, une seule zone de sélection est affichée.
Donc, voici ce que je suis venu avec. Cela fonctionne très bien sauf qu'il remplace la barre d'outils par défaut.
/**
* Extended Filters dropdown with taxonomy term selection values
*/
jQuery.each(mediaTaxonomies,function(key,label){
media.view.AttachmentFilters[key] = media.view.AttachmentFilters.extend({
className: key,
createFilters: function() {
var filters = {};
_.each( mediaTerms[key] || {}, function( term ) {
var query = {};
query[key] = {
taxonomy: key,
term_id: parseInt( term.id, 10 ),
term_slug: term.slug
};
filters[ term.slug ] = {
text: term.label,
props: query
};
});
this.filters = filters;
}
});
/**
* Replace the media-toolbar with our own
*/
media.view.AttachmentsBrowser = media.view.AttachmentsBrowser.extend({
createToolbar: function() {
media.model.Query.defaultArgs.filterSource = 'filter-media-taxonomies';
this.toolbar = new media.view.Toolbar({
controller: this.controller
});
this.views.add( this.toolbar );
this.toolbar.set( 'terms', new media.view.AttachmentFilters[key]({
controller: this.controller,
model: this.collection.props,
priority: -80
}).render() );
}
});
});
Le monde merveilleux de Backbone.js et WP (dont je ne connais presque rien).
Je pense que le problème est que vous appelez simplement la même valeur par défaut media.view
. Je pense plutôt que vous devez en initialiser une nouvelle.
Par exemple:
/**
* Replace the media-toolbar with our own
*/
var myDrop = media.view.AttachmentsBrowser;
media.view.AttachmentsBrowser = media.view.AttachmentsBrowser.extend({
createToolbar: function() {
media.model.Query.defaultArgs.filterSource = 'filter-media-taxonomies';
myDrop.prototype.createToolbar.apply(this,arguments);
this.toolbar.set( key, new media.view.AttachmentFilters[key]({
controller: this.controller,
model: this.collection.props,
priority: -80
}).render() );
}
});
Vous donnerait quelque chose comme ci-dessous (je n'ai pas vérifié les erreurs en profondeur, mais cela fonctionne).
Vous devriez également envisager de le faire avec media.view.AttachmentFilters
et tout ce qui est personnalisé en ce qui concerne window.wp.media;
.