Медиа файлы — изображения, аудио, видео и документы — занимают значительную часть места на сервере вашего WordPress сайта. Со временем в медиабиблиотеке накапливается множество файлов, которые больше не используются в записях и страницах. Это приводит к увеличению объема резервных копий, замедлению работы сайта и усложнению управления контентом. В этой статье разберём, как найти и удалить старые и неиспользуемые медиа файлы в WordPress с помощью готовых плагинов и собственных скриптов.
Почему важно удалять неиспользуемые медиа файлы
Удаление неиспользуемых медиа файлов помогает:
- сэкономить место на хостинге;
- ускорить создание резервных копий;
- упростить управление медиабиблиотекой;
- повысить безопасность — уменьшить площадь атаки;
- оптимизировать производительность сайта.
Если не удалять такие файлы, они будут накапливаться, создавая «мусор» в базе данных и файловой системе.
Способы поиска неиспользуемых медиа файлов в WordPress
Поиск в базе данных и контенте
Основная сложность — определить, какие файлы не используются в записях, страницах, виджетах или настройках темы. Для этого нужно проверить, есть ли ссылки на файлы в базе данных в полях post_content, meta_value, а также в таблицах плагинов.
Ручной поиск в базе данных — трудоёмкий и рискованный процесс, поэтому лучше использовать специальные инструменты.
Использование плагинов для удаления неиспользуемых медиа
Вот несколько популярных плагинов, которые помогают автоматизировать удаление неиспользуемых медиа файлов:
- Media Cleaner — проверяет все медиафайлы на наличие использования в базе данных и удаляет неиспользуемые. Имеет бесплатную и PRO версии. Имеет интеграцию с WooCommerce, ACF и другими плагинами.
- WP-Optimize — комплексный плагин для оптимизации базы данных, который также позволяет очищать неиспользуемые медиа файлы.
- DNUI (Delete Not Used Image) — простой плагин для поиска и удаления изображений, которые не используются в контенте.
Для установки любого из этих плагинов достаточно перейти в админке WordPress в раздел «Плагины» → «Добавить новый» и ввести название в поиск.
Пример удаления неиспользуемых медиа файлов с помощью кода
Если вы хотите автоматизировать процесс удаления старых и неиспользуемых медиа программно, можно написать собственную функцию. Ниже пример функции wpall_delete_unused_media(), которая ищет медиа файлы, не привязанные к постам и страницам, и удаляет их.
function wpall_delete_unused_media() {
$args = array(
'post_type' => 'attachment',
'posts_per_page' => -1,
'post_status' => 'inherit',
);
$attachments = get_posts($args);
$deleted_count = 0;
foreach ($attachments as $attachment) {
$used = false;
// Проверка использования в контенте постов
$query = new WP_Query(array(
'post_type' => 'any',
'post_status' => 'any',
's' => basename(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);
$deleted_count++;
}
}
return $deleted_count;
}Эта функция перебирает все вложения, затем ищет в базе данных постов и страниц упоминание имени файла вложения. Если упоминаний нет, файл удаляется принудительно с диска и из базы данных.
Важно: перед запуском подобных скриптов ОБЯЗАТЕЛЬНО сделайте резервную копию сайта и базы данных, чтобы избежать потери нужных данных.
Автоматизация удаления старых медиа файлов по дате
Иногда нужно удалять не только неиспользуемые файлы, но и устаревшие медиа, например, созданные более 2 лет назад.
Для этого можно использовать WP-Cron и функцию ниже:
function wpall_delete_old_media_files() {
$date_threshold = date('Y-m-d H:i:s', strtotime('-2 years'));
$args = array(
'post_type' => 'attachment',
'post_status' => 'inherit',
'date_query' => array(
array(
'before' => $date_threshold,
),
),
'posts_per_page' => -1,
);
$attachments = get_posts($args);
$deleted_count = 0;
foreach ($attachments as $attachment) {
// Для безопасности можно добавить проверку использования, как в предыдущей функции
wp_delete_attachment($attachment->ID, true);
$deleted_count++;
}
return $deleted_count;
}
// Запланировать задачу
if (!wp_next_scheduled('wpall_cron_delete_old_media')) {
wp_schedule_event(time(), 'daily', 'wpall_cron_delete_old_media');
}
add_action('wpall_cron_delete_old_media', 'wpall_delete_old_media_files');Этот код удалит все вложения, загруженные более двух лет назад, ежедневно по расписанию WP-Cron.
Резюме и рекомендации
Удаление старых и неиспользуемых медиа файлов в WordPress — важная задача для поддержания здоровья сайта и экономии ресурсов сервера. Используйте проверенные плагины, такие как Media Cleaner с сайта WPSHOP.ru или автоматизируйте процесс с помощью собственных скриптов, описанных выше.
Не забывайте всегда создавать резервные копии перед массовыми удалениями и тестировать скрипты на тестовом сервере.