Saya mencoba membuat opsi di jendela WP modal media untuk mendeteksi file duplikat dan menghapus file yang lebih baru jika duplikat yang lebih lama ditemukan. Saya memiliki kode berikut yang berfungsi (bersama dengan filter 'attachment_fields_to_edit') untuk membatalkan pilihan file duplikat dan pilih file asli dalam modal media. Yang ingin saya lakukan adalah, ketika pengguna mengklik tombol, hapus file asli (atau setidaknya menyembunyikannya di jendela perpustakaan media sehingga saya bisa menghapusnya nanti).
( 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 );
Tampilannya seperti gambar terlampir.
Saya dapat melihat di media-views.js pada baris 5873 bahwa ada fungsi deleteAttachment terikat pada 'klik .delete-attachment'. Bagaimana saya bisa mengakses ini, mengingat pengaturan saya saat ini, dengan mengirimkan ID gambar atau objek lampiran?
sumber
Jawaban:
Mencoba jawaban yang agak kanonik (atau setidaknya berlimpah), ini adalah javascript untuk
wpse142997.js
di direktori templat anak:Ini adalah
functions.php
:Javascript mencoba mengikuti cara WP Media Modal sebanyak yang saya mengerti, yang hanya sebagian. Itu menciptakan
media.view.Attachment
dan menggunakanwp.template
templat. Sudah ada beberapa bit hacky - mendapatkan sidebar khususnya melalui jangkauan panjang ke objek frame tampaknya mencurigakan (dan hanya ditemukan setelah banyak mengaduk-aduk).sumber
Anda hanya perlu memanggil
destroy
metode padaattachment
model. Ini akan menghapus lampiran dari tampilan Media Library, dan mengirim panggilan ajax ke backend untuk menghapus lampiran dalam database dan semua file yang ditautkan dalam direktori unggahan.Anda tidak perlu mengonversi lampiran ke JSON untuk mendapatkan id: Anda dapat secara langsung memanipulasi model Backbone. Ini
selection
adalah koleksi beberapa lampiran.Saya juga telah menambahkan $ .proxy call untuk dapat digunakan
this
di dalam event callback klik.sumber