J'essaie de créer une option dans la fenêtre des médias modaux WP pour détecter les fichiers en double et supprimer un fichier plus récent si un doublon plus ancien est trouvé. J'ai le code suivant qui fonctionne (en conjonction avec le filtre 'attachment_fields_to_edit') pour désélectionner un fichier en double et sélectionner le fichier d'origine dans le modal média. Ce que j'aimerais faire, c'est lorsqu'un utilisateur clique sur le bouton, supprimer le fichier d'origine (ou au moins le cacher dans la fenêtre de la bibliothèque multimédia pour que je puisse le supprimer plus tard).
( 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 );
L'interface ressemble à l'image jointe.
Je peux voir dans media-views.js à la ligne 5873 qu'il y a une fonction deleteAttachment liée à 'click .delete-attachment'. Comment puis-je y accéder, compte tenu de ma configuration actuelle, en transmettant un ID d'image ou un objet attaché?
la source
Réponses:
Tenter une réponse quelque peu canonique (ou au moins abondante), voici le javascript pour
wpse142997.js
dans le répertoire du modèle enfant:C'est le
functions.php
:Le javascript essaie de suivre la voie WP Media Modal autant que je le comprends, ce qui n'est que partiel. Il crée un
media.view.Attachment
et utilise unwp.template
modèle. Il y a quelques bits hacky - obtenir la barre latérale en particulier via une longue portée dans l'objet cadre semble suspect (et n'a été trouvé qu'après beaucoup de fouilles).la source
Il suffit d'appeler
destroy
méthode sur leattachment
modèle. Cela supprimera à la fois la pièce jointe de la vue Médiathèque et enverra un appel ajax au backend pour supprimer la pièce jointe dans la base de données et tous les fichiers liés dans le répertoire de téléchargement.Vous n'avez pas besoin de convertir la pièce jointe en JSON pour obtenir l'id: vous pouvez directement manipuler les modèles Backbone. Le
selection
est une collection de plusieurs pièces jointes.J'ai également ajouté un appel $ .proxy pour pouvoir utiliser
this
à l'intérieur du rappel d'événement click.la source