Thêm chức năng lọc trong hộp phương thức


12

Tôi đang cố gắng mở rộng phương thức truyền thông, nhưng tôi không thể tìm thấy bất kỳ tài liệu / hướng dẫn nào về nó. Tôi cũng không phải là bậc thầy về xương sống ;-)

Tôi muốn thêm một hộp chọn cho mỗi phân loại được đính kèm với loại bài đăng đính kèm. Hiện tại chỉ có một hộp chọn được hiển thị.

Vì vậy, đây là những gì tôi đã đưa ra. Nó hoạt động tuyệt vời ngoại trừ việc nó thay thế thanh công cụ mặc định.


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

});

Nguyên

nhập mô tả hình ảnh ở đây


Kết quả của tôi

nhập mô tả hình ảnh ở đây


Những gì tôi muốn

nhập mô tả hình ảnh ở đây


Mã đầy đủ

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

Câu trả lời:


8

Thế giới tuyệt vời của Backbone.js và WP (trong đó tôi hầu như không biết gì).

Tôi nghĩ vấn đề là bạn chỉ đang gọi cùng một mặc định media.view, thay vào đó tôi tin rằng bạn cần phải khởi tạo một cái mới.

Ví dụ:

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

Sẽ cung cấp cho bạn một cái gì đó như dưới đây (Tôi đã không thực hiện bất kỳ kiểm tra lỗi kỹ lưỡng nhưng nó hoạt động).


nhập mô tả hình ảnh ở đây


Bạn cũng nên xem xét làm điều này với media.view.AttachmentFiltersvà bất cứ điều gì tùy chỉnh liên quan đến window.wp.media;.


Tuyệt vời cảm ơn bạn! Tôi nên đọc về backbone.js sớm, vì dường như nó được tích hợp nhiều hơn trong mọi phiên bản WP mới.
Horttcore

1
Cảm ơn bạn đã biến plugin này thành một plugin để dễ trả lời :) Thực tế bạn đã truyền cảm hứng cho tôi để tạo một plugin github cho các câu hỏi của WPSE.
Wyck
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.