В крупных и активно развиваемых сайтах на WordPress со временем накапливается множество медиафайлов — изображений, видео, аудио, которые больше не используются на страницах. Это негативно сказывается на скорости загрузки сайта, занимает место на сервере и усложняет управление медиа-библиотекой. В этой статье разберем, как автоматически удалять старые и неиспользуемые медиафайлы, используя код и плагины, а также как настроить процесс, чтобы избежать удаления нужных файлов.
Почему важно удалять старые медиафайлы в WordPress
Часто после удаления записей или смены контента файлы остаются в медиа-библиотеке. Они занимают дисковое пространство, увеличивают размер резервных копий и могут замедлять работу сайта. Регулярное удаление таких файлов помогает:
- Снизить нагрузку на сервер и ускорить бэкапы;
- Улучшить скорость загрузки сайта, особенно при использовании CDN и кеширования;
- Поддерживать порядок и удобство в админке;
- Снизить риски безопасности, связанные с неиспользуемыми файлами.
Как определить, какие медиафайлы можно удалять
Для безопасного удаления нужно понять, какие файлы не используются на сайте. Основные критерии:
- Файл не прикреплен к записи или странице (attachment post отсутствует);
- Файл не вставлен в контент записей (проверка по URL в содержимом);
- Файл не используется в миниатюрах, галереях, кастомных полях;
- Файл старше определённого срока (например, 1 год) и неактивен.
Для автоматизации проверки и удаления можно использовать плагины или написать собственный код.
Использование плагинов для автоматического удаления медиафайлов
Среди популярных решений выделяются:
- Media Cleaner — мощный плагин, который сканирует медиа-библиотеку на предмет неиспользуемых файлов и предлагает их удалить. Поддерживает фильтрацию по времени, интеграцию с WooCommerce и кастомными постами.
- WP-Optimize — кроме оптимизации базы данных, умеет удалять старые и неиспользуемые медиафайлы. Удобен для комплексной оптимизации сайта.
- Clearfy Pro — в пакете оптимизаций есть функции очистки медиа и автоматического удаления временных файлов. Подробнее на wpshop.ru.
Эти плагины позволяют безопасно управлять медиафайлами, но при работе с ними стоит делать резервные копии.
Как сделать автоматическое удаление старых медиафайлов с помощью кода
Если нужен более тонкий контроль или автоматизация без плагинов, можно написать собственный скрипт, который будет запускаться по крону и удалять неиспользуемые и старые медиафайлы.
Пример функции для поиска неиспользуемых медиафайлов
function wpkit_find_unused_attachments($days_old = 365) {
global $wpdb;
$date_limit = date('Y-m-d H:i:s', strtotime("-{$days_old} days"));
$query = $wpdb->prepare(
"SELECT ID, guid FROM {$wpdb->posts}
WHERE post_type = 'attachment'
AND post_date < %s ",
$date_limit
);
$attachments = $wpdb->get_results($query);
$unused = [];
foreach ($attachments as $attachment) {
// Проверяем вхождение файла в контент
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
'%' . $wpdb->esc_like($attachment->guid) . '%'
));
if ($count == 0) {
$unused[] = $attachment->ID;
}
}
return $unused;
}
Эта функция возвращает ID вложений старше $days_old дней, которые не используются в контенте. Далее можно их удалить программно.
Функция для удаления найденных вложений
function wpkit_delete_unused_attachments($attachment_ids) {
foreach ($attachment_ids as $id) {
wp_delete_attachment($id, true); // Удаляем физически
}
}
Автоматизация удаления по расписанию с помощью WP-Cron
Для периодической очистки добавим задачу в WP-Cron:
function wpkit_schedule_cleanup() {
if (!wp_next_scheduled('wpkit_cleanup_unused_media')) {
wp_schedule_event(time(), 'daily', 'wpkit_cleanup_unused_media');
}
}
add_action('wp', 'wpkit_schedule_cleanup');
add_action('wpkit_cleanup_unused_media', function() {
$unused = wpkit_find_unused_attachments(365);
wpkit_delete_unused_attachments($unused);
});
Этот код настроит ежедневный запуск удаления неиспользуемых файлов старше года. При необходимости интервал и время можно менять.
Рекомендации и меры предосторожности
Удаление медиафайлов — критичная операция, поэтому рекомендуем:
- Всегда делать резервную копию сайта и базы данных перед запуском скрипта или использованием плагинов.
- Проверять список файлов перед удалением вручную, особенно при первой очистке.
- Ограничивать автоматическое удаление только файлами, которые не используются нигде на сайте.
- Тестировать код на тестовом сайте перед применением на боевом.
- При необходимости использовать плагин Clearfy Pro, который имеет встроенные безопасные фильтры и логи удаления.
Выводы
Автоматическое удаление старых и неиспользуемых медиафайлов в WordPress позволяет поддерживать сайт в оптимальном состоянии, экономит место на сервере и ускоряет работу. Выбор между готовыми плагинами и собственным кодом зависит от задач и уровня навыков. В любом случае, регулярная очистка медиа — важный элемент технического обслуживания WordPress-сайтов.