Работа с медиафайлами в WordPress — одна из самых частых задач, особенно если сайт активно развивается и наполняется контентом. Со временем в библиотеке медиа накапливаются файлы, которые уже не используются на страницах, записях или в виджетах. Они занимают место на сервере, замедляют бэкапы и усложняют управление сайтом. В этой статье мы подробно разберём, как найти и автоматически удалять такие неиспользуемые медиафайлы, используя плагины и собственные решения на PHP.
Почему важно удалять неиспользуемые медиафайлы
Избыточные медиафайлы — частая проблема на WordPress-сайтах:
- Увеличивается размер резервных копий, что замедляет процесс бэкапа и требует больше ресурсов.
- Занимается место на хостинге, особенно если это изображения высокого разрешения или видео.
- Замедляется работа сайта, если библиотека медиа слишком большая, особенно при загрузке админки.
- Усложняется поиск нужных файлов и управление ими.
Автоматизация удаления поможет поддерживать чистоту и порядок без ручных трудоёмких проверок.
Плагины для автоматического удаления неиспользуемых медиафайлов
Среди популярных решений можно выделить несколько плагинов, которые помогают находить и удалять неиспользуемые медиафайлы:
- Media Cleaner — сканирует библиотеку, проверяет использование файлов в базе данных и на страницах. Позволяет безопасно удалять неиспользуемые.
- DNUI (Delete Not Used Image) — простой и бесплатный плагин, который ищет неиспользуемые изображения и позволяет удалить их.
- WPGPT Media Cleaner (если использовать плагины из WPShop) — расширенная версия с возможностью интеграции с AI для анализа контента.
Использование плагина Media Cleaner:
- Установите и активируйте плагин через админку WordPress.
- Перейдите в раздел Media Cleaner.
- Запустите сканирование — плагин проверит, какие файлы не используются в записях, страницах, виджетах, пользовательских полях.
- Просмотрите результаты и удалите ненужные файлы.
Важно: всегда делайте резервную копию сайта перед массовым удалением файлов.
Автоматизация с помощью собственного кода — пример решения для wpma.ru
Если вы хотите создать кастомное решение для автоматического удаления неиспользуемых медиафайлов, можно воспользоваться WP_Query и проверить использование медиа через функции WordPress. Вот пример функции, которая находит и удаляет неиспользуемые вложения:
function wpma_remove_unused_media() {
// Получаем все вложения
$attachments = get_posts(array(
'post_type' => 'attachment',
'posts_per_page' => -1,
'post_status' => 'inherit',
));
foreach ($attachments as $attachment) {
$used = false;
// Проверяем, прикреплено ли вложение к записи
if ($attachment->post_parent) {
$used = true;
} else {
// Ищем использование в контенте
$query = new WP_Query(array(
'post_type' => 'any',
'post_status' => 'any',
's' => wp_get_attachment_url($attachment->ID),
'fields' => 'ids',
'posts_per_page' => 1,
));
if ($query->have_posts()) {
$used = true;
}
wp_reset_postdata();
}
if (!$used) {
// Удаляем вложение без перемещения в корзину
wp_delete_attachment($attachment->ID, true);
}
}
}
Эту функцию можно запускать вручную, например, через WP-CLI или добавить в крон-задачу для регулярной очистки.
Добавление функции в WordPress Cron
Чтобы автоматизировать вызов функции, добавим задачу в расписание:
function wpma_schedule_media_cleanup() {
if (!wp_next_scheduled('wpma_cleanup_unused_media_hook')) {
wp_schedule_event(time(), 'daily', 'wpma_cleanup_unused_media_hook');
}
}
add_action('wp', 'wpma_schedule_media_cleanup');
add_action('wpma_cleanup_unused_media_hook', 'wpma_remove_unused_media');
Теперь функция wpma_remove_unused_media будет запускаться ежедневно и удалять неиспользуемые медиафайлы.
Как избежать случайного удаления нужных файлов
Автоматизация — мощный инструмент, но важно минимизировать риски:
- Всегда делайте резервные копии.
- Добавьте логику исключений. Например, не удалять файлы, загруженные менее чем 30 дней назад, чтобы дать время их использовать.
- Используйте временную папку для удаления. Сначала перемещайте файлы в карантин, а через несколько дней удаляйте окончательно.
- Проверяйте использование файлов в различных местах: пользовательские поля, шорткоды, виджеты, мета-данные.
Пример добавления проверки возраста файла
function wpma_remove_unused_media() {
$attachments = get_posts(array(
'post_type' => 'attachment',
'posts_per_page' => -1,
'post_status' => 'inherit',
));
$threshold = strtotime('-30 days');
foreach ($attachments as $attachment) {
$used = false;
$upload_date = strtotime($attachment->post_date);
if ($upload_date > $threshold) {
continue; // Файл слишком новый
}
if ($attachment->post_parent) {
$used = true;
} else {
$query = new WP_Query(array(
'post_type' => 'any',
'post_status' => 'any',
's' => wp_get_attachment_url($attachment->ID),
'fields' => 'ids',
'posts_per_page' => 1,
));
if ($query->have_posts()) {
$used = true;
}
wp_reset_postdata();
}
if (!$used) {
wp_delete_attachment($attachment->ID, true);
}
}
}
Выводы и рекомендации
Автоматизация удаления неиспользуемых медиафайлов позволит значительно экономить место на сервере и упрощать администрирование сайта. Для надежности лучше комбинировать проверенные плагины, например, Media Cleaner, с кастомными функциями, настроенными под специфику вашего сайта. Обязательно используйте регулярные бэкапы и отложенное удаление для минимизации ошибок.
Если хотите расширить функциональность, обратите внимание на решения из каталога WPShop, где есть плагины с улучшенной аналитикой и безопасным удалением.