Владельцы WordPress-сайтов часто сталкиваются с проблемой накопления большого количества медиафайлов, которые больше не используются на сайте. Это приводит к увеличению размера базы данных и дискового пространства, замедляет резервное копирование и усложняет управление медиа. В этой статье мы разберем, как автоматически находить и удалять старые и неиспользуемые медиафайлы в WordPress, используя плагины и собственные решения на PHP.
Почему важно удалять неиспользуемые медиафайлы
Медиафайлы занимают значительную часть пространства на сервере. Со временем в библиотеке накапливается много изображений, видео и других файлов, которые больше не используются в постах, страницах или виджетах. Их хранение приводит к:
- Увеличению размера резервных копий сайта и времени их создания.
- Замедлению работы сайта, особенно если медиафайлы загружаются на страницу по ошибке.
- Затруднениям в управлении библиотекой медиа.
Удаление таких файлов позволяет улучшить производительность и упростить администрирование.
Использование плагинов для автоматического удаления медиафайлов
Существует несколько надежных плагинов, которые помогают находить и удалять неиспользуемые медиафайлы:
- Media Cleaner — популярный плагин, который сканирует библиотеку и определяет медиа, не связанные с контентом. Он поддерживает работу с различными типами записей, плагинами и конструкторами страниц.
- DNUI (Delete Not Used Image) — простой и эффективный инструмент для поиска и удаления неиспользуемых изображений.
- WPGPT Media Cleaner Pro (ссылка: https://wpshop.ru/plugins/media-cleaner) — расширенная версия с поддержкой дополнительных кастомных типов записей и интеграцией с плагинами.
Настройка Media Cleaner:
- Установите и активируйте плагин.
- Перейдите в раздел Media » Cleaner.
- Нажмите кнопку сканирования, чтобы найти неиспользуемые файлы.
- Просмотрите результаты и удалите ненужные файлы.
Плагины значительно упрощают задачу, однако в некоторых случаях требуется более гибкий подход с помощью кода.
Автоматическое удаление старых медиафайлов с помощью кода
Если вам нужно регулярно удалять медиафайлы старше определенного срока, можно написать кастомный скрипт. Например, удалять изображения, которые не использовались последние 180 дней.
Ниже приводится пример функции wpfinder_delete_old_media, которую можно добавить в файл functions.php вашей темы или использовать в виде отдельного плагина:
function wpfinder_delete_old_media() {
global $wpdb;
$days_old = 180; // количество дней
$date_limit = date('Y-m-d H:i:s', strtotime('-' . $days_old . ' days'));
// Получаем ID вложений старше заданной даты
$attachments = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM $wpdb->posts WHERE post_type = 'attachment' AND post_date < %s",
$date_limit
));
foreach ($attachments as $attachment_id) {
// Проверяем, используется ли файл в контенте
$file_used = false;
$file_url = wp_get_attachment_url($attachment_id);
if (!$file_url) continue;
$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) {
$file_used = true;
}
if (!$file_used) {
// Удаляем вложение и файлы с диска
wp_delete_attachment($attachment_id, true);
}
}
}
// Запускаем функцию через WP-Cron раз в сутки
if (!wp_next_scheduled('wpfinder_daily_media_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpfinder_daily_media_cleanup');
}
add_action('wpfinder_daily_media_cleanup', 'wpfinder_delete_old_media');Этот код каждое утро будет искать вложения старше 180 дней и удалять те, которые не используются в контенте сайта. Обратите внимание, что поиск на вхождение URL файла в контент – простая проверка, в сложных случаях можно расширить алгоритм.
Как проверить, что удаление безопасно и не повредит сайт
Перед автоматическим удалением рекомендуем:
- Создать резервную копию базы данных и файлов сайта.
- Выполнить сканирование плагином Media Cleaner в режиме теста.
- Просмотреть список найденных неиспользуемых медиа вручную.
- При необходимости добавить исключения для медиа, которые могут использоваться динамически или через плагины.
Также можно доработать функцию удаления, добавив логику по исключению файлов, используемых в виджетах, настройках темы и других местах.
Интеграция с WP-Cron и планировщиками задач
Автоматизация удаления старых медиафайлов удобна благодаря WP-Cron, встроенному в WordPress планировщику задач. В примере выше мы настроили ежедневный запуск функции очистки. Вы можете изменить периодичность на еженедельный или ежемесячный, зарегистрировав соответствальное событие с помощью wp_schedule_event.
Если ваш хостинг не поддерживает WP-Cron, можно настроить системный cron-задание, вызывающее файл wp-cron.php через curl или wget.
Заключение к теме удаления старых медиафайлов
Удаление неиспользуемых и старых медиафайлов в WordPress — важная задача для поддержания производительности и удобства управления сайтом. Использование плагинов, таких как Media Cleaner Pro, позволяет быстро и безопасно находить и удалять лишние файлы. Для регулярной автоматизации можно написать собственный скрипт на PHP и запускать его через WP-Cron. Обязательно тестируйте решения на резервной копии сайта, чтобы избежать потери нужных данных.