В процессе работы с WordPress многие сталкиваются с проблемой автоматического удаления изображений из медиабиблиотеки. Это может привести к потере важных файлов, которые ещё используются на сайте, хотя и не отображаются напрямую. В этой статье мы подробно рассмотрим, почему происходит автоматическое удаление, как его отключить, а также приведём примеры кода и полезные плагины для контроля медиабиблиотеки.
Причины автоматического удаления изображений в WordPress
WordPress по умолчанию не удаляет медиафайлы без вашего участия, но некоторые плагины или настройки хостинга могут инициировать очистку медиабиблиотеки от неиспользуемых или старых файлов. Часто это связано с оптимизацией пространства на сервере или ускорением работы сайта.
Основные причины автоматического удаления изображений могут быть:
- Плагины оптимизации и очистки базы данных, которые ошибочно считают файлы неиспользуемыми.
- Настройки хостинга, включающие автоматическую очистку временных файлов.
- Ошибки в пользовательских скриптах, которые удаляют файлы без проверки привязки к записям.
Если вы столкнулись с потерей изображений, первое, что нужно сделать — проверить используемые плагины и настройки хостинга.
Как отключить автоматическое удаление изображений через плагины
Если причиной стали плагины оптимизации, например, Clearfy Pro, WP-Optimize или Media Cleaner, то для отключения удаления нужно:
- Перейти в настройки соответствующего плагина.
- Найти раздел, связанный с очисткой медиабиблиотеки или удалением неиспользуемых файлов.
- Отключить автоматическое удаление или настроить исключения для важных папок и файлов.
Например, в Clearfy Pro есть настройки, позволяющие детально контролировать очистку, включая исключения для определённых типов файлов и папок.
Отключение автоматического удаления через functions.php или плагин
Если удаление происходит из-за кастомных функций или сторонних скриптов, можно добавить фильтр, предотвращающий удаление изображений по ошибке. Ниже пример функции с префиксом wponline_, которая блокирует удаление медиафайлов, если они связаны с записями:
function wponline_prevent_media_deletion( $maybe_delete, $post_id ) {
$post = get_post( $post_id );
if ( $post->post_type === 'attachment' ) {
$parent_id = $post->post_parent;
// Если у вложения есть родительская запись, отменяем удаление
if ( $parent_id && get_post( $parent_id ) ) {
return false; // Запрещаем удаление
}
}
return $maybe_delete;
}
add_filter( 'wp_delete_file', 'wponline_prevent_media_deletion', 10, 2 );
Эта функция проверяет, имеет ли изображение родительскую запись. Если да — удаление отменяется, что помогает избежать случайной потери нужных файлов.
Использование плагинов для контроля и восстановления изображений
Для контроля состояния медиабиблиотеки рекомендуем использовать плагины, которые помогают выявлять неиспользуемые изображения, но при этом не удаляют их автоматически без подтверждения. Вот несколько полезных инструментов:
- Media Cleaner — сканирует медиабиблиотеку и показывает неиспользуемые файлы, но удаляет их только после вашего подтверждения.
- Regenerate Thumbnails — полезен для восстановления или пересоздания миниатюр после изменений в теме или размерах изображений.
- WPRemark — позволяет создавать и управлять отзывами с изображениями, при этом контролируя загрузку и удаление медиафайлов.
Использование таких плагинов снижает риск потери файлов и помогает грамотно управлять медиабиблиотекой.
Дополнительные рекомендации по защите изображений
Для дополнительной безопасности и контроля изображений советуем соблюдать следующие практики:
- Регулярно делать резервные копии сайта, включая папку uploads.
- Проверять и документировать используемые плагины, особенно те, что работают с медиабиблиотекой.
- Использовать пользовательские фильтры и хуки для контроля процесса удаления.
- Ограничивать права доступа пользователей, чтобы предотвратить случайное удаление.
- Мониторить логи сервера и WordPress для выявления подозрительных операций.
Такой комплексный подход поможет избежать потери данных и сохранит стабильность работы сайта.