Ich versuche, eine Option im Fenster für modale WP-Medien zu erstellen, um doppelte Dateien zu erkennen und eine neuere Datei zu löschen, wenn ein älteres Duplikat gefunden wird. Ich habe den folgenden Code (in Verbindung mit dem Filter 'attachment_fields_to_edit'), um die Auswahl einer doppelten Datei aufzuheben und die Originaldatei im Medien-Modal auszuwählen. Was ich tun möchte, ist, wenn ein Benutzer auf die Schaltfläche klickt, die Originaldatei zu löschen (oder sie zumindest im Fenster der Medienbibliothek auszublenden, damit ich sie später löschen kann).
( 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 );
Die Oberfläche sieht aus wie das angehängte Bild.
Ich kann in media-views.js in Zeile 5873 sehen, dass es eine Funktion deleteAttachment gibt, die an das Klicken auf .delete-attachment gebunden ist. Wie kann ich bei meinem aktuellen Setup darauf zugreifen, indem ich eine Bild-ID oder ein Anhangsobjekt übergebe?
quelle
Antworten:
Wenn Sie versuchen, eine etwas kanonische (oder zumindest reichhaltige) Antwort zu finden, ist dies das Javascript für
wpse142997.js
das untergeordnete Vorlagenverzeichnis:Dies ist der
functions.php
:Das Javascript versucht, so weit ich es verstehe, dem WP Media Modal-Weg zu folgen, der nur teilweise ist. Es erstellt eine
media.view.Attachment
und verwendet einewp.template
Vorlage. Es gibt ein paar hacky Bits - insbesondere die Sidebar über eine lange Reichweite in das Frame-Objekt zu bekommen, scheint verdächtig (und wurde erst nach langem Stöbern gefunden).quelle
Sie müssen nur die
destroy
Methode für dasattachment
Modell aufrufen . Dadurch wird sowohl der Anhang aus der Medienbibliotheksansicht entfernt als auch ein Ajax-Aufruf an das Backend gesendet, um den Anhang in der Datenbank und alle verknüpften Dateien im Upload-Verzeichnis zu löschen.Sie müssen den Anhang nicht in JSON konvertieren, um die ID zu erhalten. Sie können die Backbone-Modelle direkt bearbeiten. Das
selection
ist eine Sammlung von mehreren Anhängen.Ich habe auch einen $ .proxy- Aufruf hinzugefügt , um
this
den Click-Event-Callback verwenden zu können.quelle