Obtém informações de anexo / imagem no JS

3

Existe um método específico para obter informações de anexo / imagem no JS? Eu tenho um id de anexo e antes de usar qualquer

add_action("wp_ajax_get_image_info", "get_image_info");

Gostaria de ver se existe um método nativo para fazer isso apenas através de JS.

    
por Benn 12.03.2015 / 21:57

2 respostas

9

Para encurtar a história, você pode obter informações sobre um anexo usando a função wp.media.attachment() . Isso fornecerá dados completos, desde que esse anexo já esteja carregado por outro script ou um wp.media() popup.

Se os dados ainda não estiverem carregados, você poderá carregá-los usando o método .fetch() em anexo, o que funciona porque é um Backbone.Collection . É um Collection porque um anexo pode ter vários arquivos selecionados nele.

// 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');
});

Forma fácil de fazer o pré-carregamento:

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

E é assim que você vai querer pré-carregar mais de um anexo , em uma única solicitação 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');
  })

Observe o fato de que a solicitação AJAX executada por wp.media.query() é paginada. Se você precisa de uma solução robusta para carregar lotes e lotes de anexos, você deve analisar cada página com hasMore() e more() métodos .

Aviso:

Eu usei esse método antes de descobrir sobre wp.media.query , mas ele tem a penalidade de fazer uma solicitação por anexo pré-carregado. Mas também tem um bom recurso - ele não faz nenhuma solicitação se todos os anexos que precisam ser pré-carregados já estiverem no estado buscado.

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();
        })
    );
},
    
por Andrei Glingeanu 30.08.2016 / 09:40
0

O Jetpack tem uma API JSON que permite consultar praticamente tudo em uma determinada instalação. enlace

    
por user12479 13.03.2015 / 01:02