Obtener información adjunta / imagen en JS

3

¿Existe un método específico para obtener información de adjuntos / imágenes en JS? Tengo un ID de archivo adjunto y antes de usar cualquier

add_action("wp_ajax_get_image_info", "get_image_info");

Me gustaría ver si hay un método nativo para hacer esto únicamente a través de JS.

    
pregunta Benn 12.03.2015 - 21:57

2 respuestas

9

En pocas palabras, puede obtener información sobre un archivo adjunto utilizando la función wp.media.attachment() . Esto le dará datos completos siempre y cuando este archivo adjunto ya esté cargado por otra secuencia de comandos o una ventana emergente wp.media() .

Si los datos aún no están cargados, puede cargarlos utilizando el método .fetch() en el archivo adjunto, que funciona porque es un Backbone.Collection . Es un Collection porque un archivo adjunto puede tener varios archivos seleccionados en él.

// preload your attachment
wp.media.attachment(ID).fetch().then(function (data) {
  // preloading finished
  // after this you can use your attachment normally
  wp.media.attachment(ID).get('url');
});

Manera fácil de hacer la precarga:

function preloadAttachment(ID, callback) {
  // if it doesn't have URL we probably have to preload it
  if (wp.media.attachment(ID).get('url')) {
    wp.media.attachment(ID).fetch().then(function () {
      callback(wp.media.attachment(ID);
    });

    return;
  }

  callback(wp.media.attachment(ID));
}

// USAGE:
preloadAttachment(10, function (attachment) {
  console.log(attachment.get('url'));
  console.log(wp.media.attachment(10).get('url')); // this also works
})

Y así es como querrás precargar más de un archivo adjunto , en una sola solicitud AJAX.

// An array of attachments you may want to preload
var attachment_ids = [10, 11, 12, 13];
wp.media.query({ post__in: attachment_ids })
  .more()
  .then(function () {
    // You attachments here normally
    // You can safely use any of them here
    wp.media.attachment(10).get('url');
  })

Tenga en cuenta el hecho de que la solicitud AJAX realizada por wp.media.query() está paginada. Si necesita una solución robusta para cargar muchos y muchos archivos adjuntos, debe analizar cada página con hasMore() y more() métodos .

Descargo de responsabilidad:

He usado este método antes de descubrir wp.media.query pero tiene la penalidad de hacer una solicitud por archivo adjunto precargado. Pero también tiene una buena característica: no realiza ninguna solicitud si todos los archivos adjuntos que deben precargarse ya se encuentran en estado de recuperación.

function preloadMultipleAttachments(attachment_ids) {
    // I'd rather use Promise.all() here but they do not work with
    // jQuery deferreds :/
    if (jQuery.when.all===undefined) {
        jQuery.when.all = function(deferreds) {
            var deferred = new jQuery.Deferred();
            $.when.apply(jQuery, deferreds).then(
                function() {
                    deferred.resolve(Array.prototype.slice.call(arguments));
                },
                function() {
                    deferred.fail(Array.prototype.slice.call(arguments));
                });

            return deferred;
        }
    }

    return jQuery.when.all(
        attachment_ids.filter(function (attachment_id) {
            return ! wp.media.attachment(attachment_id).get('url');
        }).map(function (id) {
            return wp.media.attachment(id).fetch();
        })
    );
},
    
respondido por el Andrei Glingeanu 30.08.2016 - 09:40
0

Jetpack tiene una API JSON que le permite consultar prácticamente todo en una instalación determinada. enlace

    
respondido por el user12479 13.03.2015 - 01:02

Lea otras preguntas en las etiquetas