Управление медиафайлами — одна из важных задач при поддержке WordPress-сайта. Со временем в библиотеке накапливается множество устаревших или неиспользуемых файлов, которые занимают место на сервере и замедляют работу сайта. В этой статье рассмотрим, как автоматизировать процесс удаления таких медиафайлов, используя как готовые плагины, так и собственные решения на PHP.
Почему важно удалять неиспользуемые медиафайлы
Медиафайлы (изображения, видео, документы) занимают значительный объем на диске. Если не следить за их количеством, можно столкнуться с рядом проблем:
- Переполненный диск и лимиты хостинга;
- Замедление операций резервного копирования;
- Трудности с навигацией в библиотеке медиа;
- Потенциальные риски безопасности из-за устаревших файлов.
Регулярное удаление неиспользуемых файлов помогает поддерживать сайт в порядке и улучшать производительность.
Как определить неиспользуемые медиафайлы в WordPress
WordPress не хранит напрямую информацию о том, где используется конкретный файл, поэтому задача определения неиспользуемых файлов требует обходных решений.
Классический подход — сверять медиабиблиотеку с содержимым постов, страниц, виджетов и других типов контента, а также проверять ссылки из CSS и JS. Для этого существуют специальные плагины и скрипты.
Использование плагинов для поиска неиспользуемых медиафайлов
Вот несколько популярных плагинов, которые упрощают задачу:
- Media Cleaner — проверяет медиафайлы на предмет использования и предлагает удалить неиспользуемые. Бесплатная версия доступна на официальном репозитории.
- WP-Optimize — комплексный плагин для оптимизации, в том числе умеет очищать библиотеку медиафайлов.
- Remove Unused Media — простой инструмент для поиска и удаления неиспользуемых файлов.
Все эти плагины можно установить и настроить через админпанель WordPress, однако при больших объемах данных рекомендуется предварительно сделать резервную копию.
Автоматизация удаления неиспользуемых файлов через код
Если вы хотите настроить более тонкий и автоматический контроль, можно использовать кастомный PHP-код, который периодически проверяет библиотеку и удаляет устаревшие медиафайлы. Рассмотрим пример функции с префиксом wpdeveloper_, которая удаляет медиафайлы, не привязанные к записям, старше 90 дней.
function wpdeveloper_delete_old_unused_media() {
$args = array(
'post_type' => 'attachment',
'posts_per_page' => -1,
'post_status' => 'inherit',
'date_query' => array(
array(
'before' => '90 days ago',
),
),
'meta_query' => array(
array(
'key' => '_wp_attached_file',
'compare' => 'EXISTS',
),
),
);
$attachments = get_posts($args);
foreach ($attachments as $attachment) {
$attached_post = get_post($attachment->post_parent);
if (!$attached_post) {
// Проверяем, не используется ли файл в контенте
$file_url = wp_get_attachment_url($attachment->ID);
global $wpdb;
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
'%' . $wpdb->esc_like($file_url) . '%'
));
if ($count == 0) {
// Удаляем медиафайл
wp_delete_attachment($attachment->ID, true);
}
}
}
}
// Регистрация задачи в cron для выполнения ежедневно
if (!wp_next_scheduled('wpdeveloper_daily_media_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpdeveloper_daily_media_cleanup');
}
add_action('wpdeveloper_daily_media_cleanup', 'wpdeveloper_delete_old_unused_media');Этот код:
- Получает все вложения старше 90 дней;
- Проверяет, есть ли у них родительская запись;
- Если родителя нет, проверяет, используется ли URL файла в содержимом сайта;
- Если файл не используется, удаляет его;
- Автоматически запускает функцию ежедневно через WP-Cron.
Как обезопасить процесс удаления
Важно не удалять файлы, которые могут быть нужны, даже если они не связаны напрямую с записями. Например, файлы, которые используются в кастомных полях, плагинах, темах или в CSS.
Рекомендуемые меры безопасности:
- Перед удалением делать резервную копию медиа;
- Выполнять удаление сначала в тестовой среде;
- Добавлять логи удалений для отслеживания;
- Отключать автоматическое удаление, если не уверены в безопасности.
Пример использования плагина Clearfy Pro для оптимизации медиа
Плагин Clearfy Pro предлагает инструменты для очистки и оптимизации медиа. С его помощью можно быстро найти и удалить неиспользуемые файлы, а также оптимизировать базу данных для повышения производительности.
Clearfy Pro интегрируется с WP-Cron, что позволяет настроить автоматическую очистку по расписанию без лишних усилий.
Заключение
Автоматическое удаление старых и неиспользуемых медиафайлов — важная задача для поддержания порядка и производительности WordPress-сайта. Использование проверенных плагинов и собственных скриптов с планировщиком задач позволяет надежно и эффективно справляться с этим.
Рекомендуется комбинировать оба подхода: для быстрой проверки и первичной очистки использовать плагины, а для регулярной автоматизации — собственные функции с WP-Cron.