В процессе работы с WordPress накапливается большое количество медиа файлов, многие из которых перестают использоваться на сайте. Такие неиспользуемые изображения и другие медиа занимают место на сервере и могут замедлять работу сайта, особенно при резервном копировании и миграции. В этой статье рассмотрим, как найти и удалить старые медиа файлы без использования плагинов, используя возможности WordPress и PHP.
Почему важно удалять неиспользуемые медиа файлы
Каждый загруженный файл сохраняется в папке wp-content/uploads, а ссылки на них хранятся в базе данных в таблице wp_posts с типом записи attachment. Но с течением времени часть из них перестает использоваться, например, после удаления страниц, постов, смены дизайна или редизайна контента. Оставшиеся без ссылок медиа файлы занимают место и создают беспорядок.
Удаление таких файлов позволяет:
- Освободить место на хостинге.
- Уменьшить время резервного копирования.
- Сделать структуру файловой системы более организованной.
- Повысить безопасность, удаляя неиспользуемые и потенциально уязвимые файлы.
Как определить, какие медиа файлы не используются
Самый точный способ — сопоставить записи типа attachment в базе данных с фактическим использованием файлов в контенте сайта. Для этого можно выполнить SQL-запрос, который выявит вложения, не связанных с постами или страницами, либо не встречающихся в содержимом.
Пример SQL-запроса, который показывает все вложения без родительских записей (то есть не прикрепленные к постам):
SELECT ID, post_title, guid FROM wp_posts WHERE post_type = 'attachment' AND post_parent = 0;Однако не всегда отсутствие родителя означает, что файл не используется — он может быть вставлен в контент через URL напрямую.
Поиск неиспользуемых медиа через PHP и WP_Query
Можно написать кастомный скрипт, который проверит наличие ссылки на файл в постах и страницах:
<?php
function wpkeys_find_unused_media() {
global $wpdb;
$attachments = $wpdb->get_results("SELECT ID, guid FROM {$wpdb->posts} WHERE post_type = 'attachment'");
$unused = [];
foreach ($attachments as $attachment) {
$file_url = $attachment->guid;
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
'%' . $wpdb->esc_like($file_url) . '%'
));
if ($count == 0) {
$unused[] = $attachment;
}
}
return $unused;
}
$unused_media = wpkeys_find_unused_media();
foreach ($unused_media as $media) {
echo 'ID: ' . $media->ID . ' URL: ' . $media->guid . "<br>";
}
?>Этот код выводит список вложений, которые не встречаются в содержимом постов и страниц. Такой список можно использовать для дальнейшего удаления.
Как безопасно удалить неиспользуемые медиа файлы
Удалять медиа файлы нужно аккуратно, чтобы не сломать сайт. Для этого:
- Создайте резервную копию базы данных и файлов перед удалением.
- Используйте функцию WordPress
wp_delete_attachment(), чтобы удалить вложение и все его метаданные. - Удаляйте файлы пакетно, чтобы избежать случайных ошибок.
Пример автоматического удаления через код
Ниже пример функции, которая удаляет вложения по ID безопасно через WP API:
function wpkeys_delete_unused_media($attachment_ids) {
foreach ($attachment_ids as $id) {
$deleted = wp_delete_attachment($id, true); // true — удаляет и файл
if ($deleted) {
echo "Удалено вложение ID: $id<br>";
} else {
echo "Ошибка при удалении ID: $id<br>";
}
}
}
// Использование
$unused = wpkeys_find_unused_media();
$ids_to_delete = wp_list_pluck($unused, 'ID');
wpkeys_delete_unused_media($ids_to_delete);Этот подход гарантирует, что удаление пройдет через встроенные методы WordPress и не оставит мусорных данных в базе.
Альтернативные методы и плагины для удаления неиспользуемых медиа
Если вы хотите автоматизировать процесс без ручного кода, можно использовать плагины. Среди них:
- Media Cleaner — сканирует библиотеку и находит неиспользуемые файлы.
- Clearfy Pro — расширенный инструмент оптимизации сайта, включая работу с медиа.
Плагины удобнее для новичков, но ручной способ через код дает полный контроль и не требует установки дополнительных расширений.
Рекомендации по работе с медиа в WordPress
Чтобы минимизировать накопление неиспользуемых медиа, придерживайтесь следующих правил:
- Регулярно проверяйте библиотеку медиа на неиспользуемые файлы.
- Удаляйте медиа сразу при удалении постов и страниц.
- Используйте оптимизацию изображений и храните только необходимые размеры.
- Автоматизируйте очистку с помощью Cron задач и кастомных скриптов.
Следуя этим рекомендациям, вы сохраните порядок в медиа файлах и улучшите производительность сайта.