Actualizar wp.media después de una llamada ajax

4

Estoy creando un complemento donde agrego una pestaña al administrador de medios y puedo agregar cosas de otra fuente. Agrego la pestaña con esto, que genera un 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 ***/
}

En resumen, hay un iframe en el iframe. :) El códice wp tenía un iframe en el ejemplo, pero sé que funciona sin él. Cualquier cómo.

Cuando juego en mi iframe y presiona un botón, esta página en el iframe envía un mensaje. En el "Más código a continuación" que escribí anteriormente, tengo 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>

Y sí, soy consciente de que no estoy enviando un correo electrónico. Esto es solo para pruebas. Todo funciona. Lo que ahora quiero lograr es conseguir que wp.media actualice la biblioteca en "Agregar medios" - > pestaña "biblioteca". Y aquí es donde fallo.

Encontré este hilo pero nada aquí realmente ayuda. Como puede ver, ya que estoy en el wp_iframe, he declarado wp como parent.wp para llamar a wp.media stuff.

Hasta ahora he logrado cambiar el estado para que muestre la biblioteca, pero no se actualice. Puedo hacer esto con:

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

pero lo extraño es que después de esto no se está ejecutando más js. Si yo, por ejemplo, agrego la línea console.log ('Hola mundo'); Después de esta línea la consola queda en silencio.

¿Por lo tanto, sospecho que tengo que actualizarlo antes de configurar el estado?

¿Alguna idea sobre cómo seleccionar otro cuadro / estado / tabulación (la biblioteca), actualizarlo y (si es posible, no es necesario) cambiarlo?

    
pregunta gubbfett 30.10.2015 - 17:15

1 respuesta

5

Entonces, seguí tus enlaces y esto está funcionando para mí. Esta prueba funciona igual para mis devoluciones de llamada de carga, así que espero que funcione para usted.

En el 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 
}
    
respondido por el jgraup 10.12.2015 - 03:14

Lea otras preguntas en las etiquetas