Я пытаюсь создать опцию в окне модального мультимедиа WP для обнаружения дубликатов файлов и удаления более нового файла, если найден более старый дубликат. У меня есть следующий код работает (в сочетании с фильтром 'attachment_fields_to_edit'), чтобы отменить выбор дубликата файла и выбрать оригинальный файл в медиа-модале. Я хотел бы, чтобы, когда пользователь нажимал кнопку, удалял исходный файл (или, по крайней мере, скрывал его в окне библиотеки мультимедиа, чтобы я мог удалить его позже).
( 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 );
Интерфейс выглядит как прикрепленное изображение.
В файле media-views.js в строке 5873 я вижу, что есть функция deleteAttachment, связанная с «click .delete-attachment». Как я могу получить доступ к этому, учитывая мои текущие настройки, передав идентификатор изображения или объект вложения?
источник
Ответы:
Попытка несколько канонического (или по крайней мере обильного) ответа, это javascript для
wpse142997.js
в дочернем каталоге шаблона:Это
functions.php
:Яваскрипт пытается следовать WP Media Modal так, насколько я понимаю, что является лишь частичным. Он создает
media.view.Attachment
и используетwp.template
шаблон. Есть несколько хакерских битов - получение боковой панели, в частности, через длинный радиус действия в кадре, кажется подозрительным (и было найдено только после большого количества возни).источник
Вам просто нужно вызвать
destroy
метод наattachment
модели. Это приведет к удалению вложения из представления библиотеки мультимедиа и отправке Ajax-вызова в бэкэнд для удаления вложения в базе данных и всех связанных файлов в каталоге загрузки.Вам не нужно преобразовывать вложение в JSON, чтобы получить идентификатор: вы можете напрямую манипулировать моделями Backbone. Это
selection
коллекция из нескольких приложений.Я также добавил вызов $ .proxy, чтобы можно было использовать его
this
в обратном вызове события click.источник