Расширение wp.media.model: запрос медиа из другого блога сети и обновление вида

9 февр. 2013 г., 21:37:35
Просмотры: 1.12K
Голосов: 1

Я пытаюсь расширить новый wp.media.model, чтобы пользователи могли выбирать любой блог в сети и загружать связанную медиатеку в представление содержимого библиотеки.

В старом thickbox мы просто вызывали switch_to_blog() и обновляли thickbox.

Я хотел бы остаться в рамках новых backbone.js media-views и media-models (открыт для других предложений), но у меня возникают проблемы с получением результатов wp.media.query() из правильного блога. Я вызываю switch_to_blog() с использованием метода wp.media.ajax, и глобальные переменные устанавливаются правильно. Однако результат переменной query ниже - это объект вложений для исходного блога, а не для того, на который переключились.

javascript:

/*global blogs */ //Объект блогов сети, переданный через 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;
}
Комментарии

Пока выглядит хорошо, но, к сожалению, ваш трюк с wp.media.editor.add(), скорее всего, перестанет работать в версии 3.6, релиз которой запланирован на следующей неделе. WordPress больше не возвращает существующий загрузчик и всегда создает новый при вызове add. https://core.trac.wordpress.org/ticket/24062

NoBugs NoBugs
18 мая 2013 г. 15:26:27

Не берите в голову, на момент публикации релиз был запланирован через 2 дня, но похоже, что выпуск 3.6 откладывается, и эта ошибка, надеюсь, будет исправлена в финальном релизе.

NoBugs NoBugs
21 мая 2013 г. 06:24:19