Ajout d'une fonction de filtrage dans la boîte de dialogue multimédia

12

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.

C'est donc ce que j'ai proposé. Cela fonctionne très bien, sauf qu’il remplace la barre d’outils par défaut.

Code

/**
 * 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() );
        }
    });

});

Original

Monrésultat

Ce que je veux

Codecomplet

enlace

    
posée Horttcore 07.09.2013 - 00:47

1 réponse

8

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 un nouveau.

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 procédé à une vérification approfondie des erreurs, 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; .

    
réponse donnée Wyck 15.09.2013 - 08:24

Lire d'autres questions sur les étiquettes