Как запретить медиатеке WordPress удалять изображение?

У меня есть настраиваемый тип сообщения, который должен иметь свое изображение. Его характерное изображение также отображается в медиатеке, где пользователь может безвозвратно удалить файл изображения/вложения. Но я хочу запретить пользователю удалять изображение функции моего пользовательского типа сообщения. Поэтому я использую следующий хук, чтобы перехватить запрос ajax, проверить, удаляет ли пользователь изображение моего пользовательского типа сообщения, и остановить процесс, используя wp_die().

add_filter('pre_delete_attachment', 'check_my_custom_post_type', 0, 2);
function check_my_custom_post_type($delete, $post) {
    if (Yes it is image of my custom type) {
        wp_die('My message', 'My title', ['response' => 400]);
    }
}

Он отлично работает на стороне сервера. Изображение моего пользовательского типа сообщения не может быть удалено. Но медиа-библиотека на стороне клиента по-прежнему удаляет изображение из своих представлений, даже если изображение на стороне сервера не было удалено, и возникло исключение 400.

Как запретить библиотеке мультимедиа удалять изображения из своих представлений на стороне клиента, если изображение не было удалено на стороне сервера?


person O Connor    schedule 04.03.2021    source источник


Ответы (1)


В документации вторым параметром является bool|null. Попробуйте return false вместо wp_die

person Maksym Kotov    schedule 04.03.2021
comment
Я пробовал с return false, но медиатека по-прежнему удаляла изображение из своих представлений. Странно, что Медиатека предполагает, что изображение всегда будет успешно удалено на стороне сервера. Глядя в файл media-views.js, я думаю, что этот метод this.model.destroy(); удаляет изображение из представлений библиотеки мультимедиа, когда запрос AJAX завершен. Я не вижу, что находится в этой функции this.model.destroy(). - person O Connor; 08.03.2021
comment
@OConnor Также вы можете попробовать отключить вызов ajax с помощью действий wp_ajax_query-attachments wp_ajax_nopriv_query-attachments и вызвать exit в функции. - person Maksym Kotov; 08.03.2021