В процессе работы с WordPress на сайте постепенно накапливаются медиафайлы, которые больше не используются в записях, страницах или других типах контента. Такие файлы занимают место на сервере и могут замедлять работу сайта. В этой статье подробно рассмотрим, как реализовать автоматическое удаление неиспользуемых медиафайлов в WordPress с помощью кода и плагинов.
Почему важно удалять неиспользуемые медиафайлы
Со временем медиа-библиотека может становиться громоздкой, особенно на больших проектах. Неиспользуемые изображения и другие файлы занимают дисковое пространство, увеличивают время резервного копирования и могут негативно влиять на производительность сайта. Регулярное удаление таких файлов помогает:
- Оптимизировать место на сервере и в резервных копиях.
- Уменьшить время загрузки сайта и процессов бэкапа.
- Поддерживать порядок в медиатеке и облегчать управление контентом.
Как определить неиспользуемые медиафайлы в WordPress
Для удаления необходимо сначала найти файлы, которые не привязаны к записям, страницам, виджетам, меню и другим элементам сайта. Основные подходы:
- Проверка использования медиафайлов в базе данных: поиск упоминаний ID вложений в контенте.
- Анализ таблицы wp_posts с типом post_type = 'attachment'.
- Проверка метаданных и связей с другими объектами.
Этот процесс можно автоматизировать с помощью SQL-запросов или специальных функций PHP, которые затем помогут удалить неиспользуемые файлы.
Пример функции для поиска неиспользуемых медиафайлов
Ниже приведён пример пользовательской функции wp24_find_unused_media(), которая находит ID вложений без использования в контенте и метаданных.
function wp24_find_unused_media() {
global $wpdb;
// Получаем все ID медиафайлов
$attachments = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'attachment'");
$unused = [];
foreach ($attachments as $attachment_id) {
// Проверяем, используется ли attachment_id в постах
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
'%"' . $attachment_id . '"%'
));
if ($count == 0) {
// Проверяем, нет ли ссылок в метаданных
$meta_count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->postmeta} WHERE meta_value LIKE %s",
'%"' . $attachment_id . '"%'
));
if ($meta_count == 0) {
$unused[] = $attachment_id;
}
}
}
return $unused;
}Эта функция вернёт массив ID вложений, которые не используются в содержимом и метаданных. Такой подход не гарантирует 100% точности, так как медиафайлы могут использоваться сторонними плагинами или нестандартно, но он подходит для базовой очистки.
Автоматическое удаление неиспользуемых медиафайлов
Для удаления найденных файлов можно добавить функцию wp24_delete_unused_media(), которая удалит вложения по ID, используя встроенную функцию wp_delete_attachment(). Пример:
function wp24_delete_unused_media() {
$unused_media = wp24_find_unused_media();
foreach ($unused_media as $attachment_id) {
// Удаляем вложение полностью, включая файлы
wp_delete_attachment($attachment_id, true);
}
}Для автоматизации можно запускать эту функцию по расписанию через cron или WP-Cron.
Пример добавления WP-Cron для регулярной очистки
Добавим задачу, которая будет запускать очистку раз в неделю.
// Регистрируем событие при активации темы или плагина
if (!wp_next_scheduled('wp24_weekly_media_cleanup')) {
wp_schedule_event(time(), 'weekly', 'wp24_weekly_media_cleanup');
}
// Обработчик события
add_action('wp24_weekly_media_cleanup', 'wp24_delete_unused_media');
// При деактивации удаляем событие
function wp24_deactivate_cleanup() {
$timestamp = wp_next_scheduled('wp24_weekly_media_cleanup');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wp24_weekly_media_cleanup');
}
}
register_deactivation_hook(__FILE__, 'wp24_deactivate_cleanup');Такой подход позволяет автоматически поддерживать медиатеку в порядке без вмешательства администратора.
Плагины для автоматической очистки медиатеки
Если вы не хотите писать код, можно использовать проверенные плагины, которые помогают находить и удалять неиспользуемые медиафайлы:
- Media Cleaner – мощный инструмент для поиска и удаления неиспользуемых файлов. Поддерживает интеграцию с популярными плагинами и темами.
- DNUI (Delete Not Used Image) – простой плагин для поиска и удаления неиспользуемых изображений.
- WP-Optimize – комплексный плагин для оптимизации базы данных, включая очистку медиатеки.
Для загрузки Media Cleaner с официального сайта WPShop используйте ссылку: https://wpshop.ru/media-cleaner/
Рекомендации по безопасности и бэкапу
Перед автоматическим удалением файлов всегда делайте резервную копию сайта и базы данных. Ошибочное удаление важных медиафайлов может привести к поломке страниц или потере контента.
Рекомендуется сначала запускать функцию поиска, проверять результаты и только после подтверждения запускать удаление.
Также полезно добавить логирование удалённых файлов для возможности восстановления.
Итоги и советы по внедрению
Автоматизация удаления неиспользуемых медиафайлов помогает поддерживать сайт в порядке и экономит ресурсы. Выбирайте способ, который подходит именно вам: кодовое решение для тонкой настройки или надёжные плагины для удобства.
Если вы хотите расширить функционал, рассмотрите интеграцию с плагинами кеширования и оптимизации, чтобы очистка медиатеки происходила в составе общей стратегии оптимизации.
Таким образом, вы сделаете свой WordPress-сайт более лёгким, быстрым и удобным для управления.