Estendere wp.media.model, query media da un blog diverso sulla rete e aggiornare la vista

9 feb 2013, 21:37:35
Visualizzazioni: 1.12K
Voti: 1

Sto cercando di estendere il nuovo wp.media.model per permettere agli utenti di selezionare qualsiasi blog nella rete e visualizzare la libreria media associata nella vista del contenuto.

Nella vecchia thickbox bastava chiamare switch_to_blog() e aggiornare la thickbox.

Vorrei rimanere all'interno delle nuove viste e modelli backbone.js media-views e media-models (sono aperto ad altri suggerimenti) ma ho difficoltà a far restituire a wp.media.query() i risultati dal blog corretto. Sto chiamando switch_to_blog() usando il metodo wp.media.ajax e le variabili globali vengono impostate correttamente. Il risultato della variabile query qui sotto è un oggetto di allegati per il blog originale, non per quello a cui siamo passati.

javascript:

/*global blogs */ //Oggetto dei blog della rete passato via 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' => 'Switched from: '.$current. ' to '.$blog_id ) );

    exit;
}
Chris_O
Chris_O
20.6K
Commenti

Sembra tutto a posto finora, ma sfortunatamente il tuo trucco wp.media.editor.add() probabilmente smetterà di funzionare nella versione 3.6, che dovrebbe essere rilasciata la prossima settimana. WordPress non restituisce più l'uploader esistente e ne crea sempre uno nuovo quando viene chiamato add. https://core.trac.wordpress.org/ticket/24062

NoBugs NoBugs
18 mag 2013 15:26:27

Non importa, al momento della pubblicazione il rilascio era previsto tra 2 giorni, sembra che la versione 3.6 sia stata posticipata e quel bug dovrebbe essere risolto nella versione finale.

NoBugs NoBugs
21 mag 2013 06:24:19