Atualize o wp.media após a chamada ajax

4

Estou criando um plug-in no qual adiciono uma guia ao gerenciador de mídia e posso adicionar coisas de outra fonte. Eu adiciono a guia com isso, o que gera um 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 ***/
}

Então, em suma, há um iframe no iframe. :) O codex wp tinha um iframe no exemplo, mas eu sei que funciona sem ele. Qualquer como.

Quando eu jogo no meu iframe e neste pressiona um botão, esta página no iframe envia uma mensagem. No "Mais código abaixo" que escrevi acima, tenho este código:

<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>

E sim, estou ciente de que não estou enviando um nonce. Isto é apenas para testes. Tudo funciona. O que eu agora quero alcançar é fazer com que o wp.media atualize a biblioteca em "Adicionar mídia" - > guia "biblioteca". E é aí que eu falo.

Encontrei este tópico mas nada aqui realmente ajuda. Como você pode ver, desde que eu estou no wp_iframe eu declaro wp como parent.wp para chamar o material wp.media.

Até agora, consegui alterar o estado para exibir a biblioteca, mas não atualizei. Eu posso fazer isso com:

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

mas o estranho é que depois disso não está mais funcionando o js. Se eu, por exemplo, adicionar a linha console.log ('Hello world'); após essa linha, o console fica em silêncio.

Portanto, suspeito que tenho que atualizá-lo antes de definir o estado?

Alguma idéia de como selecionar outro frame / estado / tab (o da biblioteca), atualizá-lo e (se possível - não necessário) mudar para ele?

    
por gubbfett 30.10.2015 / 17:15

1 resposta

5

Então, eu segui seus links e isso está funcionando para mim. Esse teste funciona da mesma forma para meus retornos de chamada de upload, portanto, espero que funcione para você.

no 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 
}
    
por jgraup 10.12.2015 / 03:14