Activar actualización para el nuevo administrador de medios en 3.5

23

Estoy tratando de descubrir cómo es posible 'actualizar' la biblioteca de medios en el nuevo diálogo de medios en 3.5. Estoy agregando imágenes de una biblioteca de imágenes externas a la biblioteca de WordPress (a través de un combo de pestaña / iFrame en el diálogo de medios) que funciona bien, pero tengo que cerrar y volver a abrir el diálogo para mostrar las imágenes recién agregadas (que tienen ha sido agregado exitosamente a la biblioteca).

Sé que hay wp.media.editor.open()y wp.media.editor.close()métodos, pero no puedo encontrar un sort()o refresh()(o lo que sea) en la fuente. A decir verdad, el código fuente es una lectura bastante intensa y console.logaparentemente no ayuda mucho con backbone.js. ¿Algunas ideas?

Richard Sweeney
fuente
3
Una pregunta más a la galería "New Media Manager: The Great Unknown" . A medida que avanza, espero documentación completa y engancha a WP 3.7 ... Todos los votos positivos indican una comunidad hambrienta.
brasofilo
En lugar de la función refresh (), podemos usar la combinación de la función wp.media.editor.close () y wp.media.editor.open () para lograr el resultado deseado.
Vinod Dalvi
En el selector de imágenes destacadas, por ejemplo, hay un modificador en la línea 3644 wp-includes / js / media-views.js para saber si la biblioteca multimedia se ha cargado o no. Parecería estar haciendo referencia, wp.media.featuredImage.frame().views.get('.media-frame-content')[0].views.get("")[3].collection.lengthpero establecer esa longitud en 0 no hace nada.
NoBugs

Respuestas:

7

La forma correcta de actualizar el contenido del marco, como se encuentra en el núcleo de WP, es la siguiente:

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())});
}

Siempre debe verificar si el contenido está disponible; de ​​lo contrario, actualice la biblioteca.

¡Aclamaciones!

timocouckuyt
fuente
¿Dónde está esto en WP core?
NoBugs
¿Estás seguro de que esto sigue siendo correcto? Parece que wp.media.featuredImage.frame().options.selection.resetexiste pero no hay wp.media.featuredImage.frame().collectionpor ejemplo.
NoBugs
4

Me tomó un par de días, pero finalmente busqué lo suficiente para resolver esto:

wp.media.editor.get(wpActiveEditor).views._views[".media-frame-content"][0].views._views[""][1].collection.props.set({ignore:(+(new Date()))})

Parece que debe haber una manera más fácil, ¡pero eso me funciona mientras tanto!

Nicky Hajal
fuente
1
parece tan intuitivo :) sin embargo, esto funciona !! ¡¡¡GRACIAS!!!
Andrej
3
acabo de encontrar una forma "más oficial" de hacerlo: wp.media.frame.content.get('gallery').collection.props.set({ignore: (+ new Date())});en este caso, estoy actualizando la gallerypestaña.
Jermim bilal
2
Si bien ambos comandos desencadenan una actualización, después ya no puede agregar imágenes en el modal :( necesita otra solución para esto
Benjamin Intal
Esto todavía está lejos de ser una solución ideal, pero vale la pena señalar que la media-frame-contentclave ha cambiado de 1 a 2:wp.media.editor.get(wpActiveEditor).views._views[".media-frame-content"][0].views._views[""][2].collection.props.set({ignore:(+(new Date()))})
Ian
Por la razón anterior, es mejor usar la versión más genérica publicada en otra parte de esta pregunta:wp.media.frame.content.get().collection.props.set({ignore: (+ new Date())});
Ian
1

Actualización 2019. Encontré una solución mejor que no rompe el cargador:

wp.media.frame.on('open', function() {
    if (wp.media.frame.content.get() !== null) {          
        // this forces a refresh of the content
        wp.media.frame.content.get().collection._requery(true);

        // optional: reset selection
        wp.media.frame.content.get().options.selection.reset();
    }
}, this);
z1ad
fuente
0

es lo que buscas

wp.media.editor.remove('content');
wp.media.editor.add('content');
Rajeev Vyas
fuente
Por favor explique por qué eso podría resolver el problema.
fuxia