Estoy tratando de crear una opción en la ventana de medios modal de WP para detectar archivos duplicados y eliminar un archivo más nuevo si se encuentra un duplicado anterior. Tengo el siguiente código funcionando (junto con el filtro 'attach_fields_to_edit') para anular la selección de un archivo duplicado y seleccionar el archivo original en el modo de medios. Lo que me gustaría hacer es que, cuando un usuario haga clic en el botón, elimine el archivo original (o al menos lo oculte en la ventana de la biblioteca multimedia para que pueda eliminarlo más 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 );
La interfaz se parece a la imagen adjunta.
Puedo ver en media-views.js en la línea 5873 que hay una función deleteAttachment vinculada a 'click .delete-attach'. ¿Cómo puedo acceder a esto, dada mi configuración actual, pasando una ID de imagen o un objeto adjunto?
fuente
Respuestas:
Intentando una respuesta algo canónica (o al menos abundante), este es el javascript para
wpse142997.js
en el directorio de la plantilla secundaria:Este es el
functions.php
:El javascript intenta seguir el modo modal de WP Media tanto como lo entiendo, lo cual es solo parcial. Crea ay
media.view.Attachment
usa unawp.template
plantilla. Hay algunos bits extravagantes: obtener la barra lateral en particular a través de un largo alcance en el objeto del marco parece sospechoso (y solo se encontró después de mucho hurgar).fuente
Solo tiene que llamar al
destroy
método en elattachment
modelo. Esto eliminará el archivo adjunto de la vista Biblioteca de medios y enviará una llamada ajax al backend para eliminar el archivo adjunto en la base de datos y todos los archivos vinculados en el directorio de cargas.No necesita convertir el archivo adjunto a JSON para obtener la identificación: puede manipular directamente los modelos de Backbone. El
selection
es una colección de varios archivos adjuntos.También he agregado una llamada $ .proxy para poder usar
this
dentro de la devolución de llamada del evento click.fuente