Adicionar função de filtro na caixa modal de mídia

12

Estou tentando estender o modal de mídia, mas não consigo encontrar nenhuma documentação / tutoriais sobre isso. Eu também não sou mestre em backbone ;-)

Desejo adicionar uma caixa de seleção para cada taxonomia anexada ao tipo de postagem de anexo. No momento, apenas uma caixa de seleção é mostrada.

Então é isso que eu criei. Funciona muito bem, exceto que substitui a barra de ferramentas padrão.


Código

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

insira a descrição da imagem aqui


Meu resultado

insira a descrição da imagem aqui


O que eu quero

insira a descrição da imagem aqui


Código completo

https://github.com/Horttcore/Media-Taxonomies

Horttcore
fonte

Respostas:

8

O maravilhoso mundo do Backbone.js e do WP (dos quais sei quase nada).

Acho que o problema é que você está apenas chamando o mesmo padrão media.view. Em vez disso, acredito que você precisa inicializar um novo.

Por exemplo:

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

Daria a você algo como abaixo (eu não fiz nenhuma verificação completa de erros, mas funciona).


insira a descrição da imagem aqui


Você também deve considerar fazer isso com media.view.AttachmentFiltersqualquer coisa personalizada em relação a window.wp.media;.

Wyck
fonte
Perfeito, obrigado! Devo ler sobre o backbone.js em breve, pois parece que ele fica mais integrado a cada nova versão do WP.
Horttcore 15/09/13
1
Obrigado por fazer deste um plugin, para que fosse fácil responder :) De fato, você me inspirou a criar um plugin do github para perguntas do WPSE.
21713 Wyck