Медиафайлы в WordPress занимают значительное место на сервере, особенно если сайт активно развивается и обновляется. Со временем на сайте накапливаются неиспользуемые изображения, видео и другие файлы, которые не удаляются автоматически. Это может привести к переполнению дискового пространства, замедлению работы сайта и усложнению резервного копирования. В этой статье мы подробно рассмотрим, как автоматизировать удаление старых медиафайлов в WordPress, используя проверенные способы и примеры кода.
Почему важно удалять старые медиафайлы в WordPress
В процессе разработки и администрирования сайта накапливается много медиафайлов, которые перестали использоваться. Например, изображения удалённых страниц, смена дизайна, временные загрузки. Такие файлы:
- Занимают лишнее место на диске, что может привести к дополнительным расходам на хостинг.
- Могут вызвать путаницу при администрировании сайта и усложнить поиск нужных медиа.
- Замедляют процесс резервного копирования и восстановления.
Поэтому регулярное удаление неиспользуемых и устаревших медиафайлов – важная задача для поддержания здоровья сайта.
Как определить, какие медиафайлы можно удалить
Главная сложность – определить, какие медиафайлы не используются в контенте сайта. Для этого подойдут следующие методы:
- Проверка использования через базу данных — поиск ссылок на медиафайлы в записях, страницах, виджетах и настройках.
- Использование специализированных плагинов, которые анализируют медиа и показывают неиспользуемые файлы.
- Ручной аудит каталога uploads с сопоставлением с медиа в библиотеке.
Рассмотрим подробнее инструменты и способы автоматизации.
Плагины для поиска и удаления неиспользуемых медиафайлов
Самый простой способ – использовать готовые решения:
- Media Cleaner — сканирует сайт на предмет неиспользуемых медиа, позволяет безопасно удалять их. Есть как бесплатная, так и платная версия с расширенными функциями.
- DNUI (Delete Not Used Image) — простой плагин, который ищет неиспользуемые изображения и предлагает их удалить.
- WP-Optimize — комплексный плагин для оптимизации базы и медиафайлов, включая удаление неиспользуемого.
Для примера рассмотрим использование Media Cleaner:
- Установите и активируйте плагин с wpshop.ru.
- Запустите сканирование — плагин проанализирует все записи и покажет неиспользуемые файлы.
- Проверьте результаты, чтобы исключить ложные срабатывания, и удалите файлы.
Такой подход позволяет быстро и безопасно освободить место без риска сломать сайт.
Автоматизация удаления с помощью WP Cron и пользовательского кода
Если вы хотите более гибкое решение, можно написать свой код, который будет автоматически удалять медиафайлы, не использующиеся в течение определённого времени. Основная идея:
- Периодически (например, раз в неделю) запускать скрипт через WP Cron.
- Искать медиафайлы, которые не связаны с записями и были загружены дольше определённого срока назад.
- Удалять такие файлы программно.
Пример кода для автоматического удаления старых неиспользуемых медиа
function wpdigest_delete_old_unused_media() {
global $wpdb;
// Время в секундах, например 30 дней
$days = 30;
$time_limit = time() - ($days * 24 * 60 * 60);
// Получаем ID вложений, которые не связаны с записями
$query = "
SELECT ID FROM $wpdb->posts
WHERE post_type = 'attachment'
AND post_date_gmt < %s
AND ID NOT IN (
SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = '_thumbnail_id'
)
AND ID NOT IN (
SELECT ID FROM $wpdb->posts WHERE post_parent != 0
)
";
$attachments = $wpdb->get_col($wpdb->prepare($query, date('Y-m-d H:i:s', $time_limit)));
foreach ($attachments as $attachment_id) {
// Проверяем, что медиа не используется в контенте
$meta = get_post_meta($attachment_id);
$attachment = get_post($attachment_id);
$content = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM $wpdb->posts WHERE post_content LIKE %s",
'%' . $attachment->guid . '%'
));
if (!$content) {
wp_delete_attachment($attachment_id, true);
}
}
}
// Регистрируем событие в WP Cron
if (!wp_next_scheduled('wpdigest_cron_delete_old_unused_media')) {
wp_schedule_event(time(), 'weekly', 'wpdigest_cron_delete_old_unused_media');
}
add_action('wpdigest_cron_delete_old_unused_media', 'wpdigest_delete_old_unused_media');
Этот код:
- Находит вложения (медиафайлы), которые старше 30 дней.
- Проверяет, что они не связаны с записями и не используются в контенте.
- Удаляет такие вложения полностью.
- Запускается автоматически каждую неделю через WP Cron.
Обязательно протестируйте этот скрипт на тестовом сайте, чтобы избежать удаления нужных файлов.
Советы по безопасности и резервному копированию перед удалением
При автоматическом удалении медиафайлов важно соблюдать меры предосторожности:
- Всегда делайте резервную копию сайта и базы данных перед запуском автоматических скриптов.
- Тестируйте код на локальном или тестовом сервере.
- Добавьте логи и уведомления для контроля работы скрипта.
- Используйте плагин Clearfy Pro (wpshop.ru), который помогает оптимизировать и чистить сайт, в том числе медиа.
Заключение
Автоматизация удаления старых и неиспользуемых медиафайлов помогает поддерживать сайт WordPress в оптимальном состоянии, экономит место на сервере и увеличивает производительность. Вы можете использовать готовые плагины, такие как Media Cleaner, или написать собственные решения с использованием WP Cron и пользовательских функций. Главное — подходить к задаче аккуратно и всегда иметь резервные копии.