Usiłuję utworzyć opcję w modalnym oknie nośnika WP, aby wykryć duplikaty plików i usunąć nowszy plik, jeśli zostanie znaleziony starszy duplikat. Mam następujący kod działający (w połączeniu z filtrem „attach_fields_to_edit”), aby odznaczyć zduplikowany plik i wybrać oryginalny plik w module modalnym. Chciałbym to zrobić, gdy użytkownik kliknie przycisk, usuń oryginalny plik (lub przynajmniej ukryj go w oknie biblioteki multimediów, aby móc go później usunąć).
( 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 );
Interfejs wygląda jak załączony obraz.
Widzę w media-views.js w linii 5873, że istnieje funkcja deleteAttachment związana z „kliknięciem .delete-załącznik”. Jak mogę uzyskać do tego dostęp, biorąc pod uwagę moją bieżącą konfigurację, przekazując identyfikator obrazu lub obiekt załącznika?
źródło
Odpowiedzi:
Próba nieco kanonicznej (lub przynajmniej szczodrej) odpowiedzi, oto javascript dla
wpse142997.js
katalogu szablonów potomnych:To jest
functions.php
:Javascript próbuje postępować zgodnie z WP Media Modal w takim stopniu, w jakim go rozumiem, co jest tylko częściowe. Tworzy
media.view.Attachment
i używawp.template
szablonu. Jest kilka hacky bitów - szczególnie wbicie paska bocznego przez długi zasięg do obiektu w ramce wydaje się podejrzane (i zostało znalezione dopiero po wielu szturchaniach).źródło
Musisz tylko wywołać
destroy
metodę naattachment
modelu. Spowoduje to zarówno usunięcie załącznika z widoku biblioteki multimediów, jak i wysłanie wywołania ajax do zaplecza w celu usunięcia załącznika w bazie danych i wszystkich połączonych plików w katalogu uploads.Aby uzyskać identyfikator, nie trzeba konwertować załącznika na JSON: można bezpośrednio manipulować modelami szkieletowymi.
selection
Jest zbiorem kilku załączników.Dodałem także wywołanie $ .proxy, aby móc korzystać
this
z wywołania zwrotnego zdarzenia kliknięcia.źródło