images – Obtener información de archivo adjunto / imagen en JS

Pregunta:

¿Existe un método específico para obtener información de archivos adjuntos / imágenes en JS? Tengo una identificación 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 a través de JS solamente.

Respuesta:

En pocas palabras, puede obtener información sobre un archivo adjunto utilizando la función wp.media.attachment() . Esto le dará datos completos siempre que este archivo adjunto ya esté cargado por otro script o una wp.media() emergente wp.media() .

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

// 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á 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 sólida para cargar una gran cantidad de archivos adjuntos, debe analizar cada página con los hasMore() y more() .

Descargo de responsabilidad:

He utilizado este método antes de descubrir wp.media.query pero tiene la penalidad de realizar una solicitud por archivo adjunto precargado. Pero también tiene una característica interesante: no realiza ninguna solicitud si todos los archivos adjuntos que deben precargarse ya están en el estado recuperado.

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

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım