В процессе эксплуатации сайта на WordPress часто накапливаются пустующие изображения — те, которые не используются ни в одном посте или странице, но занимают место на сервере и могут замедлять работу сайта. В этой статье мы подробно разберём, как найти и удалить такие изображения, используя как готовые плагины, так и собственные решения на PHP, что особенно полезно при больших объёмах медиафайлов.
Что такое пустующее изображение и почему важно их удалять
Пустующие изображения — это файлы, которые загружены в медиатеку WordPress, но не используются на сайте. Они могут появляться из-за:
- удалённых постов или страниц, где были вставлены изображения;
- черновиков и тестовых материалов;
- ошибок при загрузке или дублирования;
- автоматической генерации миниатюр при загрузке больших изображений.
Удаление таких изображений помогает уменьшить размер бэкапов, ускорить резервное копирование, снизить нагрузку на сервер и улучшить общее быстродействие сайта.
Использование плагинов для поиска и удаления пустующих изображений
Существует несколько плагинов, которые помогают быстро найти и удалить неиспользуемые изображения. Вот самые популярные:
1. Media Cleaner
Плагин Media Cleaner сканирует медиатеку и базу данных на предмет неиспользуемых файлов. Он поддерживает большинство популярных конструкторов и плагинов, что позволяет избежать случайного удаления нужных изображений.
После установки и активации:
- Перейдите в Медиа > Media Cleaner.
- Запустите сканирование. Плагин просканирует все записи, страницы, пользовательские типы записей и метаданные.
- Просмотрите результаты и удалите ненужные изображения.
Media Cleaner имеет бесплатную и PRO-версию. Бесплатная подходит для большинства сайтов, но PRO поддерживает дополнительные плагины и конструкторы.
2. WP-Optimize
Этот плагин не только оптимизирует базу данных и кэш, но и имеет функцию очистки неиспользуемых изображений.
Его плюс — комплексный подход к оптимизации сайта.
Пример пользовательского кода для поиска пустующих изображений
Если вы предпочитаете решение без плагинов или хотите встроить функционал в свой плагин, можно использовать следующий пример кода. Он ищет изображения в медиатеке, которые не прикреплены к каким-либо записям или страницам.
function wplock_find_unattached_images() {
$args = array(
'post_type' => 'attachment',
'post_mime_type' => 'image',
'post_status' => 'inherit',
'posts_per_page' => -1,
'post_parent' => 0 // Без родительской записи
);
$query = new WP_Query($args);
if (!$query->have_posts()) {
return [];
}
$unattached_images = [];
while ($query->have_posts()) {
$query->the_post();
$unattached_images[] = [
'ID' => get_the_ID(),
'url' => wp_get_attachment_url(get_the_ID()),
'title' => get_the_title()
];
}
wp_reset_postdata();
return $unattached_images;
}Этот код ищет все изображения без родительской записи (т.е. не прикреплённые к постам или страницам). Однако он не учитывает случаи, когда изображение вставлено в контент вручную, без привязки к родителю. Поэтому этот метод — только часть решения.
Расширенный поиск пустующих изображений с проверкой контента
Для более точного определения пустующих изображений можно проверить, используется ли URL изображения в тексте постов и страниц. Вот пример функции, которая ищет все медиафайлы и проверяет их использование в базе данных:
function wplock_get_unused_images() {
global $wpdb;
$attachments = $wpdb->get_results("SELECT ID, guid FROM {$wpdb->posts} WHERE post_type = 'attachment' AND post_mime_type LIKE 'image/%'", ARRAY_A);
$unused = [];
foreach ($attachments as $attachment) {
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
'%' . $wpdb->esc_like($attachment['guid']) . '%'
));
if ($count == 0) {
$unused[] = $attachment;
}
}
return $unused;
}Эта функция перебирает все изображения и ищет их URL в содержимом постов. Если URL не найден, изображение считается пустующим.
Обратите внимание, что некоторые изображения могут использоваться динамически или через CSS, и такой поиск может не выявить все случаи использования.
Рекомендации и меры предосторожности при удалении изображений
Перед удалением пустующих изображений обязательно сделайте резервную копию сайта и базы данных. Особенно если используется автоматизированный метод.
Советы:
- Всегда проверяйте список найденных пустующих изображений вручную.
- Проверяйте, нет ли использования изображения в виджетах, настройках темы, слайдерах и других местах, которые не анализируются обычным поиском.
- Для крупных сайтов или агентств лучше использовать плагин с поддержкой всех популярных плагинов и конструкторов.
Автоматизация очистки: пример задачи cron для удаления пустующих изображений
Чтобы периодически очищать медиатеку от ненужных файлов, можно использовать WP-Cron и написать функцию, которая удаляет изображения по результатам поиска:
function wplock_delete_unused_images() {
$unused_images = wplock_get_unused_images();
foreach ($unused_images as $image) {
wp_delete_attachment($image['ID'], true); // Полное удаление
}
}
// Планируем задачу
if (!wp_next_scheduled('wplock_daily_cleanup')) {
wp_schedule_event(time(), 'daily', 'wplock_daily_cleanup');
}
add_action('wplock_daily_cleanup', 'wplock_delete_unused_images');Этот код запустит очистку один раз в день. Но будьте осторожны — перед автоматическим удалением лучше предварительно просматривать список.
Заключение
Удаление пустующих изображений — важная задача для оптимизации сайта на WordPress. Используя описанные методы — плагины и собственные функции — вы сможете существенно снизить размер медиатеки и улучшить производительность сайта. Помните про резервное копирование и тщательную проверку перед удалением.