Большинство WordPress-сайтов со временем накапливают множество медиафайлов, которые уже не используются в публикациях, страницах или настройках сайта. Такое "мусорное" хранение увеличивает размер бэкапов, замедляет работу сайта и усложняет управление контентом. В этой статье рассмотрим, как автоматизировать процесс удаления неиспользуемых медиафайлов с помощью плагинов и кастомных решений.
Почему важно удалять неиспользуемые медиафайлы
Во-первых, неиспользуемые медиафайлы занимают место на сервере и в базе данных, особенно если это крупные изображения или видео. Во-вторых, они могут привести к путанице при поиске нужных файлов и создают дополнительную нагрузку на систему резервного копирования. Кроме того, это повышает риски безопасности, если старые файлы содержат уязвимости.
Регулярная чистка медиафайлов — хорошая практика, но делать это вручную неудобно и рискованно. Поэтому важна автоматизация процесса.
Проверка использования медиафайлов: как определить неиспользуемые
Основная сложность в удалении — определить, какие файлы действительно не используются. Медиафайл может быть встроен в контент, использован в виджетах, настройках темы, плагинах или даже в кэше.
Для этого анализируют базу данных и контент сайта на наличие ссылок на URL файлов из wp-content/uploads. Некоторые плагины умеют выполнять такие проверки автоматически.
Пример использования плагина Media Cleaner
Один из самых популярных бесплатных плагинов — Media Cleaner. Он сканирует библиотеку и контент сайта, выявляя неиспользуемые файлы.
Основные возможности Media Cleaner:
- Поиск неиспользуемых файлов в публикациях, страницах, виджетах и настройках.
- Возможность безопасного удаления с возможностью восстановления.
- Поддержка мультимедийных файлов: изображения, видео, аудио.
Для автоматизации можно настроить периодическое сканирование с помощью WP-Cron, чтобы регулярно очищать библиотеку.
Автоматическое удаление неиспользуемых медиафайлов с помощью кода
Если вы хотите встроить автоматическую очистку в свой функционал без использования плагина, можно создать кастомное решение. Ниже пример функции, которая находит медиафайлы, не прикрепленные ни к одному посту, и удаляет их.
function wptool_ru_delete_unattached_media() {
$args = [
'post_type' => 'attachment',
'post_status' => 'inherit',
'posts_per_page' => -1,
'post_parent' => 0, // Файлы без родителя
];
$query = new WP_Query($args);
if ($query->have_posts()) {
foreach ($query->posts as $attachment) {
wp_delete_attachment($attachment->ID, true); // Удаляем без возможности в корзину
}
}
}
// Запускаем очистку раз в неделю
if (!wp_next_scheduled('wptool_ru_weekly_media_cleanup')) {
wp_schedule_event(time(), 'weekly', 'wptool_ru_weekly_media_cleanup');
}
add_action('wptool_ru_weekly_media_cleanup', 'wptool_ru_delete_unattached_media');Обратите внимание, что этот код удаляет только медиафайлы, которые не связаны ни с одним постом. Для более сложного анализа, учитывающего файлы, вставленные вручную через URL, потребуется дополнительный анализ контента.
Улучшение скрипта: проверка ссылок в контенте
Чтобы расширить проверку, можно просканировать все записи и проверить наличие ссылок на медиафайлы. Вот упрощённый пример функции, которая собирает все URL вложений и сравнивает их с теми, что используются в контенте:
function wptool_ru_get_used_media_ids() {
global $wpdb;
$used_ids = [];
$attachments = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type='attachment'");
$posts = $wpdb->get_results("SELECT ID, post_content FROM {$wpdb->posts} WHERE post_status='publish' AND post_type IN ('post','page')");
foreach ($posts as $post) {
foreach ($attachments as $attachment_id) {
$url = wp_get_attachment_url($attachment_id);
if (strpos($post->post_content, $url) !== false) {
$used_ids[] = $attachment_id;
}
}
}
return array_unique($used_ids);
}Дальше можно получить все вложения и удалить те, которых нет в списке $used_ids.
Плагины для автоматизации и расширенных возможностей
Кроме Media Cleaner, есть и другие решения с полезными функциями:
- WP-Optimize — позволяет оптимизировать базу данных и удалять неиспользуемые медиафайлы, а также кэш и ревизии.
- Attachment Control — ограничивает загрузку и управление медиа, что снижает накопление неиспользуемого контента.
- Clearfy Pro (ссылка) — содержит модули для уборки базы и оптимизации медиа, что помогает поддерживать порядок и производительность.
Практические рекомендации по внедрению автоматической очистки
1. Всегда делайте резервную копию сайта и базы данных перед запуском автоматического удаления.
2. Тестируйте скрипты и плагины на копии сайта, чтобы избежать потери нужных файлов.
3. Настраивайте периодичность очистки исходя из объема загрузок и частоты обновления контента.
4. Учитывайте особенности вашего сайта: если вы часто вставляете медиа по URL вручную, стандартные методы поиска могут не обнаружить такие файлы как используемые.
5. Используйте механизмы логирования удаления, чтобы отслеживать, какие файлы были удалены и вовремя вернуть по ошибке.
Заключение: как сделать автоматическое удаление безболезненным
Автоматизация удаления неиспользуемых медиафайлов — важный этап в поддержке здоровья вашего сайта. Использование готовых плагинов в сочетании с кастомными решениями позволяет добиться максимальной эффективности и безопасности. Не забывайте о регулярных резервных копиях и тестировании, чтобы не потерять важные данные.
Для более детального контроля и интеграции с другими процессами управления WordPress рекомендую обратить внимание на WPShop — здесь собраны полезные инструменты и плагины для комплексной оптимизации и автоматизации.