在AJAX调用后刷新wp.media

时间:2015-10-30 作者:gubbfett

我正在构建一个插件,在其中我向媒体管理器添加一个选项卡,并可以从其他来源添加内容。我添加了这个选项卡,它会生成一个iframe:

add_filter(\'media_upload_tabs\', \'add_myUpload_tab\');
function add_myUpload_tab($tabs) {
    $tabs[\'myTab\'] = "My tab";
    Return $tabs;
}
add_action(\'media_upload_myTab\', \'add_myUpload_save_page\');
function add_myUpload_save_page() {
    wp_iframe( \'myTab_save_frame\' );
}
function myTab_save_frame()
{
    echo media_upload_header();
    ?><iframe to my other source/><?php
    /*** More code below ***/
}
因此,简言之,iframe中有一个iframe.:)wp codex在示例中有一个iframe,但我知道没有它它也可以工作。任何方式。

当我在iframe中玩时,按下一个按钮,iframe中的这个页面会发送一条消息。在我上面写的“下面的更多代码”中,我有以下代码:

<script>
    window.addEventListener(\'message\', function(event) {
        //Setup variables
        var answer = event.data,
            wp = parent.wp;
        answer.url = answer.url.replace(/\\.\\w+$/ig,\'\');
        var data = {
          \'action\': \'add_my_image\',
          \'file\': answer.url
        };
        jQuery.post(ajaxurl, data, function(response) {
            alert(\'My image was uploaded\');
            /** From here and i below I want to do my wp.media stuff **/
        });
    });
</script>
是的,我知道我没有发送临时通知。这只是为了测试。一切正常。我现在想要实现的是获得wp。介质在“添加介质”->“库”选项卡中刷新库。这就是我失败的地方。

我发现this thread 但这里没有什么真正的帮助。正如您所看到的,由于我在wp\\u iframe中,所以我已将wp声明为父级。wp调用wp。媒体材料。

到目前为止,我已经实现了更改状态,使其显示库,但不刷新。我可以这样做:

wp.media.frame.setState(\'insert\');
但奇怪的是,在此之后,没有更多的js在运行。例如,如果我添加行控制台。日志(“Hello world”);在这一行之后,控制台是无声的。

因此,我怀疑在设置状态之前必须刷新它?

如何选择另一个框架/状态/选项卡(库中的一个),刷新它并(如果可能-不必要)切换到它?

1 个回复
最合适的回答,由SO网友:jgraup 整理而成

所以,我关注了你的链接,这对我很有用。这个测试同样适用于我的上传回调,所以希望它对您有效。

在iframe中

function myTab_save_frame()
{
    global $redir_tab;

    $redir_tab = \'mytab\';

    media_upload_header(); ?>

    <button>Test Trigger</button>

    <script>
        var switchAndReload = function() {

            // get wp outside iframe

            var wp = parent.wp;

            // switch tabs (required for the code below)

            wp.media.frame.setState(\'insert\');

            // refresh

            if( wp.media.frame.content.get() !== null) {
                wp.media.frame.content.get().collection.props.set({ignore: (+ new Date())});
                wp.media.frame.content.get().options.selection.reset();
            } else {
                wp.media.frame.library.props.set ({ignore: (+ new Date())});
            }
        };

        jQuery(\'button\').on(\'click\', function(evt){

            // do upload logic...

            // upload completed.

            // refresh library!

            switchAndReload();
        });
    </script>
    <?php 
}

相关推荐

使用‘MEDIA_HANDLE_UPLOAD’重命名图像文件名

我需要重命名用户在我的网站上发布时上传的图像。我有一个代码,可以完美地保存图像并将其作为帖子的一部分。但我希望这些图片被重命名,在其文件名中包含帖子的标题。我拥有的代码:require_once( ABSPATH . \'wp-admin/includes/image.php\' ); require_once( ABSPATH . \'wp-admin/includes/file.php\' ); require_once( ABSPATH . \'wp-admin/includes/m