Почему важно очищать медиабиблиотеку от неиспользуемых файлов
Медиабиблиотека в WordPress со временем может разрастаться, особенно на сайтах с большим количеством публикаций, страниц, товаров или других типов контента. Неиспользуемые или устаревшие изображения и файлы занимают место на сервере, увеличивают время резервного копирования и могут замедлять работу сайта. Кроме того, избыточные файлы усложняют управление контентом и могут стать причиной ошибок при миграции.
Однако простое удаление файлов из папки uploads вручную или через FTP очень рискованно. Это может привести к "сломанию" ссылок, ошибкам отображения и даже потерям данных.
В этой статье мы подробно разберём, как безопасно найти и удалить неиспользуемые файлы из медиабиблиотеки WordPress, используя проверенные методы и плагины, а также как написать собственный скрипт для автоматизации процесса.
Как определить, какие файлы в медиабиблиотеке не используются
В WordPress при загрузке файла в медиабиблиотеку создаётся запись в базе данных (в таблице wp_posts с типом attachment). При вставке изображения в пост или страницу к файлу добавляется связь с контентом.
Однако бывают ситуации, когда файлы остаются в медиабиблиотеке, но не используются ни в одном посте или другом типе записи. Это могут быть старые изображения, которые удалили из контента, но не из библиотеки, или результаты тестов и загрузок.
Чтобы определить такие файлы, нужно проверить каждую запись attachment на наличие ссылок в контенте сайта или использование в слайдерах, виджетах и других местах.
Использование плагинов для поиска неиспользуемых файлов
Существуют плагины, которые облегчают эту задачу. Рассмотрим несколько популярных решений:
- Media Cleaner — один из самых известных плагинов, который сканирует сайт и ищет файлы, не связанные с контентом. Он умеет работать с популярными плагинами, такими как WooCommerce, Visual Composer и другими. Плагин имеет бесплатную и PRO версии.
- DNUI (Delete Not Used Image) — простой и бесплатный плагин, который ищет изображения, не используемые в постах и страницах.
- WP-Optimize — комплексный плагин для оптимизации сайта, который также предлагает инструменты очистки медиабиблиотеки.
Например, чтобы установить и использовать Media Cleaner, нужно:
- Установить плагин через админ-панель: Плагины > Добавить новый, в поиске ввести "Media Cleaner".
- Активировать плагин и перейти в его настройки.
- Запустить анализ файлов и дождаться отчёта.
- Просмотреть список неиспользуемых файлов и при необходимости удалить их.
Важно перед удалением сделать резервную копию сайта и базы данных.
Как написать свой скрипт для поиска неиспользуемых файлов в медиабиблиотеке
Если вы разработчик и хотите более тонко контролировать процесс, можно написать собственный PHP-скрипт для поиска attachment, не связанных с контентом.
Основная идея:
- Получить все записи attachment из базы данных.
- Для каждого attachment получить URL файла.
- Проверить, встречается ли этот URL в таблице
wp_postsв контенте постов, страниц и других типов. - Если файл не найден ни в одном контенте — пометить для удаления.
Пример функции с префиксом wpid_:
function wpid_find_unused_attachments() {
global $wpdb;
$unused = [];
// Получаем все attachment
$attachments = $wpdb->get_results("SELECT ID, guid FROM {$wpdb->posts} WHERE post_type = 'attachment'");
foreach ($attachments as $attachment) {
$file_url = $attachment->guid;
// Ищем URL файла в содержимом записей
$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->ID;
}
}
return $unused;
}Эта функция возвращает массив ID attachment, которые не используются в содержимом постов. После проверки можно удалить их программно или через админку.
Удаление можно сделать через стандартную функцию WordPress wp_delete_attachment(), например:
foreach (wpid_find_unused_attachments() as $attachment_id) {
wp_delete_attachment($attachment_id, true); // true — без перемещения в корзину
}Особенности и подводные камни
Несмотря на простоту идеи, есть важные моменты:
- Некоторые файлы используются в нестандартных местах — например, в настройках темы, мета-полях, виджетах, плагинах. Они не могут быть найдены простым поиском по содержимому.
- Если сайт использует плагин кэширования или CDN, ссылки в контенте могут быть изменены, что затрудняет поиск.
- Перед удалением желательно вручную проверить список неиспользуемых файлов.
- Обязательно делать резервную копию перед массовым удалением.
Если вы используете плагины из WPShop.ru, например, Clearfy Pro, он предлагает дополнительные инструменты для оптимизации и очистки медиабиблиотеки с учётом различных особенностей WordPress.
Автоматизация очистки медиабиблиотеки с WPID
Для более продвинутых пользователей можно настроить автоматический запуск проверки и очистки неиспользуемых файлов, используя WP-Cron. Пример кода для добавления в файл functions.php темы или в отдельный плагин:
function wpid_schedule_unused_media_cleanup() {
if (!wp_next_scheduled('wpid_unused_media_cleanup_hook')) {
wp_schedule_event(time(), 'daily', 'wpid_unused_media_cleanup_hook');
}
}
add_action('wp', 'wpid_schedule_unused_media_cleanup');
add_action('wpid_unused_media_cleanup_hook', 'wpid_run_unused_media_cleanup');
function wpid_run_unused_media_cleanup() {
$unused = wpid_find_unused_attachments();
foreach ($unused as $attachment_id) {
wp_delete_attachment($attachment_id, true);
}
}Такой подход помогает поддерживать медиабиблиотеку в чистоте без лишних усилий.