Медиа файлы, загруженные в WordPress, со временем могут накапливаться и занимать лишнее место на сервере. Особенно это актуально для крупных проектов с большим количеством изображений и других файлов. В этой статье мы разберём, как автоматически находить и удалять неиспользуемые медиа файлы, чтобы поддерживать ваш сайт в порядке и экономить ресурсы.
Почему важно удалять неиспользуемые медиафайлы в WordPress
Когда вы загружаете изображения, видео или другие файлы в медиатеку WordPress, они остаются на сервере, даже если вы их потом не используете в записях, страницах или виджетах. Это приводит к нескольким проблемам:
- Занятие дискового пространства, что может увеличить расходы на хостинг.
- Снижение производительности сайта и резервного копирования из-за большого объёма данных.
- Потенциальные сложности при миграции сайта или обновлении.
Автоматизация удаления неиспользуемых медиа файлов поможет поддерживать чистоту и оптимизировать работу WordPress.
Проверка и удаление неиспользуемых медиафайлов с помощью плагинов
Для начала рассмотрим популярные плагины, которые помогут автоматически или полуавтоматически находить и удалять медиа, которые не связаны с контентом.
1. Media Cleaner
Плагин Media Cleaner анализирует базу данных и контент сайта, чтобы выявить неиспользуемые файлы в медиатеке. Он поддерживает работу с плагинами WooCommerce, ACF и многими другими.
Основные возможности:
- Сканирование сайта и выявление неиспользуемых файлов;
- Безопасное удаление с возможностью восстановления из корзины;
- Поддержка мультимедийных галерей и сложных типов контента.
Плагин имеет бесплатную и PRO версии, где PRO расширяет функционал для более сложных сайтов.
2. WP-Optimize Media Cleaner
Интегрируется с WP-Optimize и предлагает функцию очистки медиа. Плагин удобен для пользователей, которые уже используют WP-Optimize для оптимизации базы данных и кэширования.
Кастомное решение для автоматического удаления неиспользуемых медиафайлов
Если вы предпочитаете индивидуальные решения или хотите встроить функционал в свой плагин или тему, можно написать скрипт на PHP, который будет искать медиафайлы, не прикреплённые к записям и не используемые в контенте.
Основная логика решения:
- Получить список всех медиафайлов (attachments) из базы данных.
- Проверить, используются ли они в записях, страницах, виджетах или других метах.
- Удалить те, которые не используются.
Пример функции для поиска неиспользуемых медиафайлов
function wpskill_get_unused_media_ids() {
global $wpdb;
// Получаем все ID вложений
$all_attachments = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'attachment'");
$used_attachments = [];
// Поиск вложений, прикреплённых к постам
$attached_attachments = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'attachment' AND post_parent > 0");
$used_attachments = array_merge($used_attachments, $attached_attachments);
// Поиск вложений, используемых в контенте
$pattern = '/wp-image-(\d+)/i';
$posts = $wpdb->get_results("SELECT ID, post_content FROM {$wpdb->posts} WHERE post_status = 'publish' AND post_type IN ('post', 'page')");
foreach ($posts as $post) {
if (preg_match_all($pattern, $post->post_content, $matches)) {
foreach ($matches[1] as $id) {
$used_attachments[] = intval($id);
}
}
}
// Уникальные ID используемых вложений
$used_attachments = array_unique($used_attachments);
// Вычисляем неиспользуемые вложения
$unused = array_diff($all_attachments, $used_attachments);
return $unused;
}
Эта функция возвращает массив ID медиафайлов, которые не прикреплены к постам и не используются в контенте в виде классических <img> с классом wp-image-ID.
Автоматическое удаление найденных файлов
Чтобы удалить неиспользуемые медиа файлы, можно использовать следующий код:
function wpskill_delete_unused_media() {
$unused_ids = wpskill_get_unused_media_ids();
foreach ($unused_ids as $id) {
wp_delete_attachment($id, true); // true — удалить файлы с диска
}
}
Такой код можно запускать вручную или через WP-Cron для автоматизации процесса.
Как настроить автоматическую очистку через WP-Cron
Для регулярного удаления неиспользуемых медиафайлов добавим задачу в планировщик WordPress.
function wpskill_schedule_media_cleanup() {
if (!wp_next_scheduled('wpskill_media_cleanup_hook')) {
wp_schedule_event(time(), 'weekly', 'wpskill_media_cleanup_hook');
}
}
add_action('wp', 'wpskill_schedule_media_cleanup');
add_action('wpskill_media_cleanup_hook', 'wpskill_delete_unused_media');
Этот код запланирует еженедельный запуск функции удаления неиспользуемых медиа файлов.
Рекомендации и меры предосторожности
Перед применением автоматического удаления медиафайлов обязательно сделайте резервную копию сайта и базы данных. Убедитесь, что неиспользуемые файлы действительно не нужны, иначе можно случайно удалить важные материалы.
Также рекомендуется сначала использовать плагины с функцией «корзины» для медиа, чтобы иметь возможность восстанавливать удалённые файлы.
Для более сложных сайтов с кастомным выводом медиа, например, через ACF, WooCommerce или другие конструкторы, обязательно проверяйте поддержку таких плагинов в решении или расширяйте код под свои нужды.