С течением времени на сайте WordPress накапливается большое количество медиафайлов, которые уже не используются в публикациях или устарели. Это приводит к разрастанию базы данных и увеличению занимаемого пространства на сервере, что негативно сказывается на производительности сайта и усложняет его обслуживание. В этой статье мы рассмотрим, как автоматически удалять старые и неиспользуемые медиафайлы в WordPress, используя как готовые плагины, так и кастомные решения с примерами кода.
Почему важно удалять старый медиа-контент в WordPress
Медиафайлы — это не только картинки, но и видео, аудио, документы и другие вложения, которые загружаются в медиатеку WordPress. С течением времени многие файлы перестают использоваться: например, устаревшие изображения из удалённых или обновлённых постов. Такие файлы занимают дисковое пространство и могут замедлять создание резервных копий, синхронизацию и работу сайта.
Кроме того, наличие большого количества неиспользуемых файлов усложняет администрирование и повышает риск ошибок при обновлениях или миграциях. Автоматизация удаления позволяет своевременно очищать медиатеку без необходимости ручного контроля.
Использование плагинов для автоматического удаления старого медиа
Плагин Media Cleaner
Один из популярных инструментов — Media Cleaner. Он сканирует медиатеку и выявляет файлы, которые не используются в записях, страницах, виджетах и даже в метаданных.
Плагин предлагает безопасное удаление с возможностью восстановления, а также интеграцию с популярными плагинами, такими как WooCommerce и ACF. Media Cleaner позволяет настроить периодичность проверок и автоматическое удаление.
Настройка плагина Media Cleaner
- Установите и активируйте плагин через панель администратора WordPress.
- Перейдите в раздел Media Cleaner и запустите сканирование медиатеки.
- Просмотрите список неиспользуемых файлов и выберите, что удалить.
- В настройках включите автоматическую очистку по расписанию с помощью WP-Cron.
Такое решение подходит для большинства сайтов без необходимости ручного кода.
Кастомное решение для автоматического удаления старых медиафайлов
Если вы хотите более гибко контролировать процесс удаления или интегрировать функцию в собственные плагины/темы, можно написать свой код. Рассмотрим пример, как автоматически удалять медиафайлы, которые не использовались более 180 дней.
Пример кода для удаления старых медиафайлов
function wpfront_delete_old_unused_media() {
global $wpdb;
$days_unused = 180;
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_unused . ' days'));
// Получаем ID вложений, не используемых в записях
$attachments = $wpdb->get_results($wpdb->prepare(
"SELECT ID FROM $wpdb->posts
WHERE post_type = 'attachment'
AND post_modified < %s",
$date_threshold
));
foreach ($attachments as $attachment) {
$id = $attachment->ID;
// Проверяем, используется ли файл в контенте
$file = get_attached_file($id);
$is_used = false;
// Поиск в постах на наличие URL файла
$file_url = wp_get_attachment_url($id);
$posts_with_file = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM $wpdb->posts WHERE post_content LIKE %s",
'%' . $wpdb->esc_like($file_url) . '%'
));
if ($posts_with_file > 0) {
$is_used = true;
}
// Если не используется — удаляем
if (!$is_used) {
wp_delete_attachment($id, true);
}
}
}
// Запускаем функцию по крону, например, раз в неделю
if (!wp_next_scheduled('wpfront_weekly_media_cleanup')) {
wp_schedule_event(time(), 'weekly', 'wpfront_weekly_media_cleanup');
}
add_action('wpfront_weekly_media_cleanup', 'wpfront_delete_old_unused_media');
Данный код можно вставить в functions.php вашей темы или в собственный плагин. Он:
- Выбирает вложения (attachment) старше 180 дней;
- Проверяет, встречается ли URL файла в содержимом постов;
- Если файл не используется, удаляет его полностью с сервера;
- Запускается автоматически раз в неделю через WP-Cron.
Такой подход позволяет гибко настраивать логику и учитывать особенности сайта.
Как улучшить скрипт под свои задачи
В реальных проектах важно учитывать:
- Проверку использования файлов в метаданных, виджетах, плагинах (например, WooCommerce, ACF). Для этого можно расширить поиск по базе данных.
- Логирование удалённых файлов, чтобы иметь возможность восстановить ошибочно удалённые.
- Добавление подтверждения перед удалением — например, отправка отчёта на email.
- Настройку интервала и условий удаления (например, исключение определённых папок или типов файлов).
Для расширенной интеграции можно использовать фильтры и хуки WordPress.
Заключение по автоматическому удалению старого медиа
Автоматизация очистки медиатеки — важный этап поддержки сайта WordPress в хорошем состоянии. Использование готовых плагинов, например, Media Cleaner, позволит быстро запустить процесс без риска. Если необходим полный контроль — можно реализовать свою логику на PHP с помощью WP-Cron и функций WordPress, как показано в примере.
Регулярная очистка помогает снизить нагрузку на сервер, ускорить бэкапы и сделать сайт более управляемым.