В WordPress со временем накапливается большое количество медиафайлов, которые не используются в контенте сайта. Это может занимать много места на сервере и замедлять работу сайта. В этой статье разберёмся, как автоматически удалять старые и неиспользуемые медиафайлы, чтобы поддерживать чистоту и оптимизацию медиа-библиотеки.
Почему важно удалять старые медиафайлы в WordPress
При работе с сайтом вы часто загружаете изображения, видео и другие файлы, которые потом перестают быть актуальными. Например, картинки из удалённых постов или временные файлы. Они продолжают занимать место, но не приносят пользы. Удаление таких файлов помогает:
- Снизить нагрузку на хранилище хостинга.
- Ускорить резервное копирование сайта.
- Повысить производительность WordPress и админки.
Однако вручную искать и удалять неиспользуемые файлы неудобно и долго. Поэтому лучший вариант — автоматизация процесса.
Как найти неиспользуемые медиафайлы: подходы и плагины
Для начала важно понять, какие файлы считаются неиспользуемыми. Обычно это файлы, которые не прикреплены к записям, страницам, не вставлены в контент или не связаны с какими-либо элементами сайта.
Существуют плагины, которые помогают найти и удалить такие файлы:
- Media Cleaner — мощный плагин для поиска неиспользуемых медиафайлов в библиотеке и на сервере. Он анализирует базу данных и контент сайта, выявляя «битые» или неиспользуемые файлы.
- DNUI (Delete Not Used Image) — простой инструмент для поиска и удаления неиспользуемых изображений.
- WP-Optimize — плагин для оптимизации базы данных и очистки неиспользуемых медиа.
Но иногда хочется кастомного решения для автоматического удаления старых медиа, например, создавая правило по дате загрузки.
Автоматическое удаление медиафайлов старше N дней через WP-Cron
Можно написать собственный код, который будет периодически запускаться и удалять медиафайлы, загруженные в WordPress более определённого количества дней назад.
Для этого используем встроенную систему планировщика заданий WP-Cron и функцию удаления медиа (attachment).
Шаг 1. Создаём функцию удаления старых медиафайлов
function wprobot_delete_old_media_files() {
$days = 30; // Удалять файлы старше 30 дней
$date = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$args = array(
'post_type' => 'attachment',
'post_status' => 'inherit',
'date_query' => array(
'before' => $date,
),
'posts_per_page' => -1,
'fields' => 'ids',
);
$query = new WP_Query($args);
if ($query->have_posts()) {
foreach ($query->posts as $attachment_id) {
// Проверяем, что файл не используется
$used = wprobot_is_media_used($attachment_id);
if (!$used) {
wp_delete_attachment($attachment_id, true);
}
}
}
}
// Вспомогательная функция проверки использования медиа
function wprobot_is_media_used($attachment_id) {
global $wpdb;
$file = get_attached_file($attachment_id);
if (!$file) return true; // Если файл не найден, считаем используемым
// Проверяем, встречается ли URL файла в содержимом постов
$url = wp_get_attachment_url($attachment_id);
$like_url = '%' . $wpdb->esc_like($url) . '%';
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM $wpdb->posts WHERE post_content LIKE %s",
$like_url
));
return ($count > 0);
}Шаг 2. Добавляем задание в WP-Cron
Зарегистрируем событие, которое будет запускаться, например, один раз в сутки.
function wprobot_schedule_old_media_cleanup() {
if (!wp_next_scheduled('wprobot_daily_old_media_cleanup')) {
wp_schedule_event(time(), 'daily', 'wprobot_daily_old_media_cleanup');
}
}
add_action('wp', 'wprobot_schedule_old_media_cleanup');
add_action('wprobot_daily_old_media_cleanup', 'wprobot_delete_old_media_files');Как это работает
Этот код ищет все медиафайлы (attachments), загруженные более 30 дней назад, и проверяет, используются ли они в содержимом сайта. Если нет — файл удаляется безвозвратно (параметр true в wp_delete_attachment).
Вы можете изменить количество дней, установив нужное значение в переменной $days. Также можно расширить проверку использования, например, учитывать пользовательские поля, метаданные и т.д.
Использование плагина Clearfy Pro для управления медиафайлами
Если не хотите писать код, обратите внимание на плагин Clearfy Pro. Он содержит инструменты для оптимизации сайта, включая управление медиафайлами.
В Clearfy есть функция поиска неиспользуемых изображений и массового их удаления с возможностью планирования. Это удобное решение для автоматизации без программирования.
Рекомендации по безопасности и резервному копированию
Перед автоматическим удалением медиафайлов обязательно создавайте резервные копии сайта и базы данных. Ошибочное удаление важных файлов может негативно сказаться на работе сайта и визуальном отображении контента.
Если планируете использовать кодовое решение, сначала протестируйте его на тестовом сайте или в локальной среде.
Заключение
Автоматическое удаление старых и неиспользуемых медиафайлов помогает поддерживать порядок в WordPress и экономить ресурсы сервера. Используйте готовые плагины или внедряйте собственные решения с WP-Cron и API WordPress. В любом случае, регулярный аудит медиа-библиотеки — важная практика для любого сайта.