Почему важно удалять неиспользуемые медиа файлы в WordPress
С течением времени в библиотеке медиа файлов WordPress накапливаются изображения, видео и другие файлы, которые уже не используются на сайте. Они занимают место на сервере, замедляют резервное копирование и могут негативно влиять на производительность сайта. Особенно это актуально для сайтов с большим объемом контента и множеством загруженных медиа.
Удаление таких файлов дает несколько преимуществ: экономия дискового пространства, ускорение работы сайта, упрощение организации медиа библиотеки и снижение нагрузки на сервер. Однако процесс удаления должен быть аккуратным, чтобы не повредить текущие материалы сайта.
В этой статье разберем, как найти и удалить неиспользуемые медиа файлы средствами WordPress и с помощью кода, а также рассмотрим полезные плагины для автоматизации этой задачи.
Как определить, какие медиа файлы не используются на сайте
Первый шаг — понять, какие именно файлы не прикреплены ни к одной записи, странице или другому объекту. В WordPress медиа файлы могут быть:
- «Прикрепленные» — которые добавлены к записи или странице и отображаются там.
- «Свободные» — загруженные в библиотеку, но не прикрепленные ни к чему.
Однако, отсутствие связи с записью не всегда означает, что файл не используется. Например, файл может использоваться в виджетах, шорткодах, CSS или JavaScript, или даже напрямую вставлен в код темы.
Поэтому важно дополнительно проверить использование файлов в базе данных и в коде сайта.
Использование SQL-запросов для поиска неиспользуемых медиа
Можно выполнить запрос, чтобы найти медиа файлы, которые не прикреплены к записям:
SELECT ID, post_title FROM wp_posts WHERE post_type = 'attachment' AND post_parent = 0;Этот запрос покажет все вложения без родительской записи. Но, как мы уже сказали, это не гарантирует, что файл не используется.
Поиск упоминаний медиа в контенте
Для более точного анализа можно проверить, упоминается ли URL файла в содержимом записей и страниц. Это можно сделать с помощью простого PHP-скрипта или SQL-запроса, но лучше использовать готовые плагины.
Лучшие плагины для удаления неиспользуемых медиа файлов
Для автоматизации процесса удаления неиспользуемых медиа рекомендуются следующие плагины:
- Media Cleaner — сканирует библиотеку на наличие неиспользуемых файлов и предлагает удалить их. Имеет бесплатную и PRO-версию. Отлично подходит, если нужно комплексное решение с анализом использования файлов.
- WPGCleaner (представим, плагин от WPGuest) — легкий инструмент для поиска и удаления свободных медиа файлов. Позволяет фильтровать по дате загрузки, размеру и типу файла.
- DNUI (Delete Not Used Image) — простой плагин для поиска и удаления неиспользуемых изображений. Хорошо работает на небольших сайтах.
Используя плагины, всегда делайте резервные копии сайта и базы данных перед удалением файлов.
Как написать свой код для удаления неиспользуемых медиа в WordPress
Если хотите автоматизировать удаление в рамках собственного решения или плагина, можно использовать следующий пример кода, который найдет все вложения без родителя и удалит их.
function wpguest_delete_unused_media() {
$args = array(
'post_type' => 'attachment',
'posts_per_page' => -1,
'post_parent' => 0,
'post_status' => 'inherit',
);
$attachments = get_posts($args);
if (!empty($attachments)) {
foreach ($attachments as $attachment) {
// Проверяем, не используется ли файл в контенте
$url = wp_get_attachment_url($attachment->ID);
global $wpdb;
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
'%' . $wpdb->esc_like($url) . '%'
));
if ($count == 0) {
wp_delete_attachment($attachment->ID, true);
}
}
}
}
// Запуск функции с помощью хука или вручную
// add_action('init', 'wpguest_delete_unused_media');
Этот скрипт найдет все вложения без родителя, затем дополнительно проверит, используется ли URL файла в содержимом записей. Если нет, удалит файл без возможности восстановления.
Важно! Запускать такую функцию следует с осторожностью, лучше на тестовом сайте или после создания резервной копии.
Дополнительные советы по оптимизации медиа библиотеки
Используйте плагин Clearfy Pro для оптимизации
Clearfy Pro содержит множество инструментов для оптимизации WordPress, включая очистку базы данных и оптимизацию медиа. С ним легко настроить удаление временных и неиспользуемых файлов.
Автоматизация с помощью WPGuest: планирование очистки
Если вы хотите регулярно очищать медиа библиотеку, можно настроить cron-задачу, которая будет запускать функцию удаления неиспользуемых файлов. Вот пример, как зарегистрировать событие:
function wpguest_schedule_media_cleanup() {
if (!wp_next_scheduled('wpguest_media_cleanup_event')) {
wp_schedule_event(time(), 'daily', 'wpguest_media_cleanup_event');
}
}
add_action('wp', 'wpguest_schedule_media_cleanup');
add_action('wpguest_media_cleanup_event', 'wpguest_delete_unused_media');
<Так очистка будет происходить автоматически каждый день.
Удаление старых неиспользуемых файлов по дате загрузки
Можно дополнить функцию фильтром по дате, например, удалять только файлы, загруженные более 6 месяцев назад и не используемые на сайте. Это поможет избежать случайного удаления недавно загруженных, но временно неиспользуемых файлов.
function wpguest_delete_old_unused_media($months = 6) {
$date_query = array(
'before' => date('Y-m-d', strtotime("-{$months} months")),
);
$args = array(
'post_type' => 'attachment',
'posts_per_page' => -1,
'post_parent' => 0,
'post_status' => 'inherit',
'date_query' => array($date_query),
);
$attachments = get_posts($args);
// Аналогично проверяем использование и удаляем
// ... (аналогично предыдущему примеру)
}
Таким образом вы минимизируете риск удаления важных файлов.