Estou tentando criar uma opção na janela de mídia modal do WP para detectar arquivos duplicados e excluir um arquivo mais novo se uma duplicata mais antiga for encontrada. Eu tenho o seguinte código funcionando (em conjunto com o filtro 'attachment_fields_to_edit') para cancelar a seleção de um arquivo duplicado e selecionar o arquivo original no modal de mídia. O que eu gostaria de fazer é que, quando um usuário clicar no botão, exclua o arquivo original (ou pelo menos oculte-o na janela da biblioteca de mídia para que eu possa excluí-lo mais tarde).
( function( $ ) {
var _AttachmentDisplay = wp.media.view.Settings.AttachmentDisplay;
wp.media.view.Settings.AttachmentDisplay = _AttachmentDisplay.extend({
render: function() {
_AttachmentDisplay.prototype.render.apply(this, arguments);
currentselection = this.controller.state().get('selection').first().toJSON();
selection = this.controller.state().get('selection');
$('button.dmc').on('click', function(e){
e.preventDefault();
var id = $(e.currentTarget).data("id");
if(currentselection.id == id) {
currentattachment = wp.media.attachment(id);
selection.remove(currentattachment);
console.dir(wp.media.view.Attachment);
newattachment = wp.media.attachment($(e.currentTarget).data("original"));
selection.add(newattachment);
}
});
}
});
} )( jQuery );
A interface se parece com a imagem anexada.
Eu posso ver no media-views.js na linha 5873 que há uma função deleteAttachment vinculada a 'click .delete-attachment'. Como posso acessar isso, de acordo com minha configuração atual, passando um ID de imagem ou objeto de anexo?
fonte
Respostas:
Tentando uma resposta um tanto canônica (ou pelo menos abundante), este é o javascript para
wpse142997.js
no diretório de modelo filho:Isto é o
functions.php
:O javascript tenta seguir o caminho WP Media Modal, tanto quanto eu o entendo, que é apenas parcial. Ele cria um
media.view.Attachment
e usa umwp.template
modelo. Existem alguns bits hacky - obter a barra lateral em particular através de um longo alcance no objeto de quadro parece suspeito (e só foi encontrado depois de muito tempo bisbilhotando).fonte
Você só precisa ligar
destroy
método noattachment
modelo. Isso removerá o anexo da exibição da Biblioteca de mídia e enviará uma chamada ajax para o back-end para excluir o anexo no banco de dados e todos os arquivos vinculados no diretório de uploads.Você não precisa converter o anexo em JSON para obter o ID: é possível manipular diretamente os modelos de Backbone. O
selection
é uma coleção de vários anexos.Também adicionei uma chamada $ .proxy para poder usar
this
dentro do retorno de chamada do evento click.fonte