Почему важно удалять неиспользуемые медиафайлы в WordPress
Каждый сайт на WordPress со временем накапливает множество медиафайлов, которые уже не используются в контенте — это могут быть старые картинки, видео или документы. Такие файлы занимают место на сервере, замедляют резервное копирование и затрудняют управление сайтом. Особенно важно контролировать количество неиспользуемых медиафайлов на крупных ресурсах и магазинах, чтобы поддерживать быструю работу и экономить дисковое пространство.
Ручное удаление требует много времени и внимательности, а автоматизация процесса упрощает поддержку сайта и снижает риск ошибок. В статье рассмотрим, как создать систему автоматического удаления неиспользуемых медиафайлов, используя как готовые плагины, так и собственный код.
Использование плагинов для поиска и удаления неиспользуемых медиафайлов
Плагин Media Cleaner
Media Cleaner — один из популярных бесплатных и премиум плагинов, который сканирует библиотеку медиа WordPress и выявляет файлы, не связанные с записями, страницами, плагинами или темой. Он позволяет безопасно удалить «мусор» и освободить место.
Основные функции:
- Глубокий анализ базы и файловой системы.
- Поддержка популярных плагинов WooCommerce, ACF, WPML и других.
- Возможность работать в режиме «безопасного удаления» с корзиной.
Для установки перейдите в админ-панель WordPress, в раздел "Плагины" → "Добавить новый", найдите Media Cleaner, установите и активируйте.
Плагин WPS Hide Login с функцией очистки
Хотя WPS Hide Login в основном для смены URL страницы входа, в составе WPShop есть плагин Clearfy Pro, который содержит модуль для оптимизации и очистки медиа. Он может автоматически удалять временные и неиспользуемые медиафайлы, делая сайт легче и безопаснее.
Подробнее о Clearfy Pro и его возможностях смотрите на wpshop.ru.
Как самостоятельно реализовать автоматическое удаление неиспользуемых медиафайлов в WordPress
Алгоритм поиска неиспользуемых медиа
Для автоматизации удаления можно написать свой скрипт, который:
- Получает список всех медиафайлов из таблицы
wp_postsс типомattachment. - Проверяет, используется ли файл в записях, страницах, виджетах и других местах (например, в мета-полях или ACF).
- Формирует список неиспользуемых медиа.
- Удаляет эти файлы и записи из базы.
Важно тщательно проверять все связи, чтобы не удалить нужный контент.
Пример функции для поиска и удаления неиспользуемых медиафайлов
function wpacademy_find_and_delete_unused_media() {
global $wpdb;
// Получаем все ID вложений
$attachments = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'attachment'");
foreach ($attachments as $attachment_id) {
// Получаем URL файла
$file_url = wp_get_attachment_url($attachment_id);
if (!$file_url) continue;
// Проверяем, используется ли файл в постах и мета
$used = $wpdb->get_var($wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE (post_content LIKE %s OR post_excerpt LIKE %s) LIMIT 1",
'%' . basename($file_url) . '%', '%' . basename($file_url) . '%'
));
if (!$used) {
// Файл не используется, удаляем
wp_delete_attachment($attachment_id, true);
}
}
}
// Запускаем функцию раз в сутки через cron
if (!wp_next_scheduled('wpacademy_daily_media_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpacademy_daily_media_cleanup');
}
add_action('wpacademy_daily_media_cleanup', 'wpacademy_find_and_delete_unused_media');Этот код создаёт ежедневное задание в WP-Cron, которое удаляет неиспользуемые вложения. Он проверяет только содержимое постов, поэтому при необходимости расширьте проверку на поля мета и другие места.
Расширение функционала: учёт ACF и WooCommerce
Если ваш сайт использует продвинутые плагины, например Advanced Custom Fields или WooCommerce, файлы могут храниться ссылками в нестандартных полях. Чтобы не удалить важные медиа, нужно расширить проверку:
- Сканировать таблицу
wp_postmetaна наличие ссылок на файлы. - Проверять JSON-форматированные поля ACF.
- Учитывать файлы, привязанные к товарам WooCommerce.
Пример проверки мета-полей:
function wpacademy_is_media_used_in_meta($attachment_url) {
global $wpdb;
$like = '%' . basename($attachment_url) . '%';
$result = $wpdb->get_var($wpdb->prepare(
"SELECT meta_id FROM {$wpdb->postmeta} WHERE meta_value LIKE %s LIMIT 1",
$like
));
return !empty($result);
}Интегрируйте эту проверку в основную функцию, чтобы избежать удаления важных файлов.
Практические рекомендации по безопасному удалению медиа
При автоматическом удалении учитывайте следующие моменты:
- Всегда делайте резервную копию сайта и базы данных перед началом очистки.
- Реализуйте механизм «корзины» — сначала перемещайте файлы в отдельную папку или помечайте для удаления, а спустя время удаляйте окончательно.
- Тестируйте скрипты на тестовом сайте.
- Используйте плагины с поддержкой и возможностью восстановления.
Использование WPRemark для уведомлений после очистки медиа
Если вы хотите отслеживать процесс удаления и информировать администраторов, можно интегрировать ваш код с плагином WPRemark. Этот плагин позволяет создавать уведомления и отчёты по действиям на сайте.
Например, после удаления файлов отправлять уведомление в админку или на email с количеством удалённых медиа.
Итог
Автоматическое удаление неиспользуемых медиафайлов помогает держать WordPress-сайт в порядке, снижает нагрузку на сервер и упрощает администрирование. Для реализации можно использовать проверенные плагины, такие как Media Cleaner или модули Clearfy Pro, либо написать свой код с учётом особенностей вашего сайта и используемых плагинов. Не забывайте делать резервные копии и тщательно тестировать все изменения.