Работа с медиатекой WordPress часто вызывает вопросы, особенно когда нужно полностью удалить загруженные файлы с сервера. Многие пользователи удаляют медиафайлы через админку, но файлы остаются на сервере, занимая место и создавая беспорядок. В этой статье мы разберём, как правильно и безопасно удалить файлы из медиатеки WordPress, чтобы они не занимали место на хостинге.
Почему важно правильно удалять файлы из медиатеки WordPress
Когда вы удаляете медиафайл из стандартного интерфейса WordPress, запись об этом файле удаляется из базы данных, но сам файл физически может остаться на сервере. Это происходит из-за особенностей работы некоторых плагинов, кэширования или неправильных настроек сервера.
Накопление таких «мертвых» файлов может привести к:
- исчерпанию дискового пространства;
- затруднениям при резервном копировании;
- проблемам с безопасностью и производительностью сайта.
Поэтому важно знать, как полностью очистить медиатеку, удаляя не только записи в базе, но и сами файлы.
Удаление медиафайлов стандартными средствами WordPress
WordPress позволяет удалять медиафайлы через меню Медиатека. Для этого нужно перейти в раздел Медиатека, выбрать файл и нажать кнопку «Удалить навсегда». Однако этот метод не всегда удаляет все размеры изображений и файлы, созданные плагинами.
Если у вас много файлов, удалять вручную неудобно. В таких случаях лучше использовать специальные плагины или написать код для автоматизации.
Лучшие плагины для полного удаления медиафайлов
1. Media Cleaner
Media Cleaner — мощный плагин, который сканирует медиатеку и сервер, выявляя неиспользуемые файлы. Он позволяет безопасно удалять их, очищая пространство и базу данных.
Преимущества:
- Автоматический и ручной режимы работы.
- Поддержка сторонних плагинов и тем.
- Возможность восстановления удалённых файлов.
2. WP-Optimize
Помимо оптимизации базы данных, WP-Optimize включает функцию очистки медиатеки от неиспользуемых файлов. Этот плагин удобен для комплексного обслуживания сайта.
3. Media Deduper
Если у вас дублируются медиафайлы, Media Deduper помогает найти и удалить копии, освобождая место и упрощая структуру медиатеки.
Как написать собственный код для удаления файлов медиатеки в WordPress
Если вы хотите автоматизировать удаление медиафайлов, можно написать функцию, которая удаляет запись и все связанные файлы с помощью WordPress API. Рассмотрим пример такой функции с префиксом wprus_:
function wprus_delete_media_file_completely($attachment_id) {
// Проверяем, что ID существует и это вложение
if (!get_post($attachment_id) || get_post_type($attachment_id) !== 'attachment') {
return false;
}
// Получаем путь к файлу
$file_path = get_attached_file($attachment_id);
// Удаляем запись из базы
$deleted = wp_delete_attachment($attachment_id, true); // true - удалить физически
// Проверяем, удалился ли файл
if ($deleted && file_exists($file_path)) {
unlink($file_path); // удаляем файл вручную, если остался
}
return $deleted;
}Эта функция принимает ID вложения, проверяет его тип, удаляет запись и физический файл. В случае, если файл не удалился стандартным способом, срабатывает unlink для удаления файла вручную.
Вы можете вызвать эту функцию в цикле для массового удаления:
$attachments = get_posts(array(
'post_type' => 'attachment',
'posts_per_page' => -1,
));
foreach ($attachments as $attachment) {
wprus_delete_media_file_completely($attachment->ID);
}<Как избежать проблем при удалении медиафайлов
Перед удалением обязательно сделайте резервную копию сайта, чтобы можно было восстановить данные в случае ошибки. Также рекомендуется:
- Проверить, действительно ли файлы не используются на сайте.
- Тестировать скрипты удаления на тестовом сервере.
- Использовать плагины с возможностью восстановления или корзину.
Так вы защитите свой сайт от случайной потери важных данных.
Отладка и проверка удалённых файлов на сервере
После удаления файлов полезно проверить папку wp-content/uploads на наличие оставшихся файлов. Для этого можно использовать FTP-клиент или встроенный файловый менеджер хостинга.
Если хочется автоматизировать проверку, можно написать функцию, которая сравнивает файлы в папке загрузок и записи в базе данных, выявляя «лишние» файлы:
function wprus_find_orphaned_files() {
$upload_dir = wp_upload_dir();
$all_files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($upload_dir['basedir']),
RecursiveIteratorIterator::LEAVES_ONLY
);
$db_files = array();
$attachments = get_posts(array('post_type' => 'attachment', 'posts_per_page' => -1));
foreach ($attachments as $attachment) {
$db_files[] = realpath(get_attached_file($attachment->ID));
}
$orphaned_files = array();
foreach ($all_files as $file) {
if ($file->isFile()) {
$file_path = $file->getRealPath();
if (!in_array($file_path, $db_files)) {
$orphaned_files[] = $file_path;
}
}
}
return $orphaned_files;
}Эта функция возвращает массив файлов, которые есть на сервере, но не связаны с записями медиатеки. Их можно безопасно удалить после проверки.
Заключение
Удаление загруженных файлов из медиатеки WordPress полностью — важная задача для поддержания чистоты и производительности сайта. Используйте плагины Media Cleaner или WP-Optimize для удобства, а для индивидуальных решений применяйте собственные функции с использованием WordPress API. Всегда делайте резервные копии и тщательно проверяйте файлы перед удалением.