Extender wp.media.model, consultar medios de diferentes blogs en la red y actualizar la vista

9 feb 2013, 21:37:35
Vistas: 1.12K
Votos: 1

Estoy intentando extender el nuevo wp.media.model para permitir a los usuarios seleccionar cualquier blog de la red y cargar la biblioteca de medios asociada en la vista de contenido de la biblioteca.

En el antiguo thickbox simplemente llamábamos switch_to_blog() y actualizábamos el thickbox.

Me gustaría mantenerme dentro de las nuevas vistas y modelos de medios de backbone.js (abierto a otras sugerencias), pero estoy teniendo problemas para que wp.media.query() devuelva los resultados del blog correcto. Estoy llamando a switch_to_blog() usando el método wp.media.ajax y las variables globales correctas se están estableciendo. El resultado de la variable query a continuación es un objeto de adjuntos para el blog original, no para el blog al que se ha cambiado.

javascript:

/*global blogs */ //Objeto de blogs de la red pasado mediante 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' => 'Cambiado desde: '.$current. ' a '.$blog_id ) );

    exit;
}
Chris_O
Chris_O
20.6K
Comentarios

Parece bien hasta ahora, pero desafortunadamente tu truco con wp.media.editor.add() probablemente dejará de funcionar en la versión 3.6, que se lanzará la próxima semana. WordPress ya no devuelve el cargador existente y siempre crea uno nuevo cuando se llama a add. https://core.trac.wordpress.org/ticket/24062

NoBugs NoBugs
18 may 2013 15:26:27

No importa, en el momento de publicar el lanzamiento planeado estaba a 2 días, parece que la versión 3.6 se está retrasando y ese error debería solucionarse en el lanzamiento final.

NoBugs NoBugs
21 may 2013 06:24:19