Extinderea wp.media.model, interogarea media de pe un alt blog din rețea și actualizarea vizualizării

9 feb. 2013, 21:37:35
Vizualizări: 1.12K
Voturi: 1

Încerc să extind noul wp.media.model pentru a permite utilizatorilor să selecteze orice blog din rețea și să încarce biblioteca media asociată în vizualizarea conținutului.

În vechiul thickbox apelam simplu switch_to_blog() și reîmprospătam thickbox-ul.

Aș dori să rămân în noile media-views și media-models bazate pe backbone.js (sunt deschis și la alte sugestii), dar am probleme în a face wp.media.query() să returneze rezultatele de pe blogul corect. Folosesc switch_to_blog() prin metoda wp.media.ajax și variabilele globale sunt setate corect. Rezultatul variabilei query de mai jos este un obiect de atașamente pentru blogul original, nu pentru blogul la care am trecut.

javascript:

/*global blogs */ //Obiect cu blogurile din rețea transmis prin wp_localize_script
(function ($) {
    "use strict"; // jshint ;_;

    var current = blogs['current_blog'];
    var Blogs = blogs['UserBlogs'];

    $(function() {
        var media = wp.media.editor.add('content');
        media.on('open', function() {
            var html = $("<select>", {name:'blog_id', id: 'blog_id'});
            $.each(Blogs, function (index, blog) {
                if( 1 == index ) { return; }
                html.append($("<option>", {value:blog.userblog_id, html:blog.domain}).prop({ selected: blog.userblog_id == current}));
            });
        $(".attachment-filters").after(html);

        $("select#blog_id").change(function () {
            var str = "";
            $("select#blog_id option:selected").each(function () {
                str += $(this).val();
                var options = {
                    type: 'POST',
                    url: ajaxurl,
                    data: {
                        blog: str
                    }
                };
                wp.media.ajax('switch_blog', options );
                var query = wp.media.query();
                console.log(query);
            });
        })
    });
});
}(jQuery));

PHP:

public static function _switch_blog() {
    global $blog_id;
    $current = $blog_id;
    $blog = isset( $_POST['blog'] ) ? intval( $_POST['blog'] ) : false;
    $result = false;
    if ( (bool)$blog )
        $result = switch_to_blog( (int)$blog );
       if ( $result )
           echo json_encode( array( 'success' => $result, 'response' => 'Schimbat de la: '.$current. ' la '.$blog_id ) );

    exit;
}
Chris_O
Chris_O
20.6K
Comentarii

Arată bine până acum, dar din păcate trucul tău cu wp.media.editor.add() probabil se va defecta în versiunea 3.6, care urmează să fie lansată săptămâna viitoare. WordPress nu mai returnează uploader-ul existent și creează întotdeauna unul nou când este apelată funcția add. https://core.trac.wordpress.org/ticket/24062

NoBugs NoBugs
18 mai 2013 15:26:27

Nu mai contează, la momentul postării lansarea era planificată peste 2 zile, se pare că versiunea 3.6 este acum amânată, iar acea eroare ar trebui să fie rezolvată în versiunea finală.

NoBugs NoBugs
21 mai 2013 06:24:19