@doutaxe

Как удалить медиафайл из БД Wordpress, но оставить сам физический файл?

Есть необходимость удалить миниатюру у поста (и все ее упоминания в БД), но не удалять физический файл (т.к. он может использоваться сразу в нескольких постах). Как мне это сделать? Функция wp_delete_attachment удаляет вместе с файлом, и на других постах, где эта же картинка используется - она становится битой. Текущий код такой:

// Удаляю медиафайл
$post = get_post( $post_id );
$attachments_del = get_children( array( 'post_type'=>'attachment', 'post_parent'=>$post_id ) );
if( $attachments_del ) {
foreach( $attachments_del as $attachment_del ) wp_delete_attachment( $attachment_del->ID );
}
// Удаляю миниатюру у поста
set_post_thumbnail( $post_id, $attachment_del->ID );


Есть идея каким-то образом блокировать на время действия функции wp_delete_attachment средствами PHP физическое удаление файла, но мне это видится диким костылем.
  • Вопрос задан
  • 170 просмотров
Решения вопроса 1
OtshelnikFm
@OtshelnikFm Куратор тега WordPress
Обо мне расскажет yawncato.com
Смотри - ты юзаешь функцию https://wp-kama.ru/function/wp_delete_attachment
А посмотрев в ней исходный код я вижу вызов функции wp_delete_attachment_files в самом конце иду в нее - там wp_delete_file_from_directory, потом еще глубже wp_delete_file

И вот я тут https://wp-kama.ru/function/wp_delete_file
И там есть фильтр wp_delete_file - вот его очищай на момент отрабатывания твоей функции - тогда файл останется на диске.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы