Медиафайлы в WordPress со временем накапливаются и занимают значительное место на сервере. Особенно это актуально для сайтов с большим количеством изображений, видео и документов. Многие из этих файлов уже не используются в записях или страницах, и вручную искать их — задача утомительная и неэффективная. В этой статье разберем, как автоматически находить и удалять старые неиспользуемые медиафайлы средствами WordPress с примерами кода и рекомендациями по плагинам.
Почему важно удалять неиспользуемые медиафайлы
Удаление медиафайлов, которые не подключены к контенту сайта, позволяет:
- Сэкономить место на хостинге;
- Ускорить бэкапы и обновления сайта;
- Улучшить производительность сайта за счет уменьшения нагрузки на базу данных и файловую систему;
- Поддерживать порядок и удобство работы с библиотекой медиафайлов.
Однако важно не удалять файлы, которые используются динамически или подключаются программно, поэтому автоматизация должна быть аккуратной.
Как найти неиспользуемые медиафайлы в WordPress
Поиск неиспользуемых файлов обычно сводится к сравнению медиа в библиотеке с теми, что реально используются в записях, страницах и других типах контента.
Методы поиска
- Поиск по базе данных: анализ содержимого таблиц
wp_posts,wp_postmetaи других, где может встречаться URL или ID медиафайла. - Поиск по файловой системе: сравнение файлов в папке
wp-content/uploadsи записей в базе данных.
Простой способ — проверить, есть ли у медиафайла привязка к записям через поле post_parent. Но часто изображения используются в контенте через URL, а не как вложение, поэтому нужен более глубокий анализ.
Пример функции для поиска и удаления неиспользуемых медиафайлов
Ниже пример функции wpbit_find_and_delete_unused_media(), которая ищет медиафайлы, не встречающиеся в записях, и удаляет их. Перед применением на боевом сайте обязательно сделайте бэкап.
function wpbit_find_and_delete_unused_media() {
global $wpdb;
// Получаем все вложения типа 'attachment' (медиафайлы)
$attachments = $wpdb->get_results("SELECT ID, guid FROM {$wpdb->posts} WHERE post_type = 'attachment'");
$deleted = 0;
foreach ($attachments as $attachment) {
$media_url = esc_sql($attachment->guid);
// Ищем наличие URL медиа в контенте любых записей
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
'%' . $wpdb->esc_like($media_url) . '%'
));
// Проверяем также, есть ли у вложения родительская запись
$parent_id = $wpdb->get_var($wpdb->prepare(
"SELECT post_parent FROM {$wpdb->posts} WHERE ID = %d",
$attachment->ID
));
if ($count == 0 && $parent_id == 0) {
// Медиа не используется, можно удалить
wp_delete_attachment($attachment->ID, true);
$deleted++;
}
}
return $deleted;
}
Запустите эту функцию через WP-CLI, или добавьте в админский файл и вызовите вручную для удаления неиспользуемых медиа.
Автоматизация с помощью Cron и плагинов
Для регулярного удаления неиспользуемых медиафайлов можно настроить задачу Cron. Вот пример, как добавить ежедневное событие для вызова нашей функции:
function wpbit_schedule_delete_unused_media() {
if (!wp_next_scheduled('wpbit_delete_unused_media_daily')) {
wp_schedule_event(time(), 'daily', 'wpbit_delete_unused_media_daily');
}
}
add_action('wp', 'wpbit_schedule_delete_unused_media');
add_action('wpbit_delete_unused_media_daily', 'wpbit_find_and_delete_unused_media');
Также можно использовать готовые плагины для поиска неиспользуемых медиа, например:
- Media Cleaner — один из самых популярных плагинов, который сканирует медиа и помогает безопасно удалить мусор.
- Clearfy Pro — комплексный инструмент оптимизации, включает функции очистки и оптимизации медиа.
Особенности и рекомендации
При автоматическом удалении медиа важно учитывать:
- Некоторые медиа могут динамически загружаться через плагины или темы, и не иметь прямой ссылки в содержимом.
- Перед удалением лучше создавать резервные копии, чтобы избежать случайной потери важных файлов.
- Тестируйте функции на тестовом сайте.
- Если используете плагины, выбирайте те, которые поддерживаются и имеют хорошие отзывы.
Автоматизация удаления старых и неиспользуемых медиафайлов поможет поддерживать ваш WordPress-сайт в чистоте, улучшить производительность и снизить расходы на хостинг.