В процессе работы с сайтом на WordPress медиатека быстро наполняется изображениями, которые со временем перестают использоваться. Это приводит к увеличению размера резервных копий, замедлению загрузки сайта и переполнению хранилища. В этой статье мы разберём, как найти и удалить старые, неиспользуемые изображения из WordPress без использования плагинов, используя только собственные скрипты и базовые инструменты.
Почему важно удалять неиспользуемые изображения в WordPress
При загрузке изображений в WordPress они сохраняются в папке wp-content/uploads. Однако, когда изображения перестают использоваться в записях, страницах или других элементах сайта, они остаются на сервере, занимая место. Это приводит к следующим проблемам:
- Рост размера бэкапов и затрат на хостинг.
- Снижение скорости работы сайта из-за большого числа файлов.
- Затруднения при поиске нужных медиафайлов в медиатеке.
Удаление неиспользуемых изображений помогает поддерживать чистоту сайта и оптимизировать его работу.
Как определить неиспользуемые изображения в WordPress
Для поиска неиспользуемых изображений можно выполнить несколько шагов:
- Получить список всех изображений в медиатеке. Это можно сделать, извлекая все вложения с типом
image. - Проверить, используются ли эти изображения в записях, страницах, виджетах и настройках темы. Это можно сделать поиском по содержимому и метаданным.
- Исключить изображения, используемые в качестве миниатюр (featured images) и в пользовательских полях.
Для автоматизации этих шагов можно написать PHP-скрипт, который выполнит поиск и выведет список неиспользуемых файлов.
Пример функции для поиска неиспользуемых изображений
function wpelement_find_unused_images() {
global $wpdb;
// Получаем все ID вложений с типом image
$images = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type='attachment' AND post_mime_type LIKE 'image/%'");
$unused_images = [];
foreach ($images as $image_id) {
// Получаем URL изображения
$image_url = wp_get_attachment_url($image_id);
// Проверяем, используется ли URL в контенте других записей
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s AND post_status = 'publish'",
'%' . $wpdb->esc_like($image_url) . '%'
));
// Проверяем, не является ли изображение миниатюрой
$is_thumbnail = (bool) $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->postmeta} WHERE meta_key = '_thumbnail_id' AND meta_value = %d",
$image_id
));
if ($count == 0 && !$is_thumbnail) {
$unused_images[] = $image_id;
}
}
return $unused_images;
}
Эта функция возвращает массив ID изображений, которые не используются в опубликованных записях и не назначены как миниатюры.
Как безопасно удалить найденные изображения
Удаление файлов напрямую с сервера может привести к ошибкам, если изображения все еще используются где-то в базе данных. Поэтому рекомендуется использовать встроенную функцию WordPress wp_delete_attachment(), которая удаляет файл и все связанные с ним данные.
Пример удаления неиспользуемых изображений
$unused_images = wpelement_find_unused_images();
foreach ($unused_images as $image_id) {
wp_delete_attachment($image_id, true); // true — удаляет сразу без перемещения в корзину
}
Перед запуском удаления обязательно сделайте резервную копию базы данных и файлов сайта.
Как автоматизировать процесс удаления с помощью WP-Cron
Чтобы регулярно очищать медиатеку от неиспользуемых изображений, можно настроить задачу в WP-Cron, которая будет запускать функцию поиска и удаления по расписанию.
Пример добавления WP-Cron задачи
function wpelement_schedule_image_cleanup() {
if (!wp_next_scheduled('wpelement_cleanup_event')) {
wp_schedule_event(time(), 'weekly', 'wpelement_cleanup_event');
}
}
add_action('wp', 'wpelement_schedule_image_cleanup');
add_action('wpelement_cleanup_event', function() {
$unused_images = wpelement_find_unused_images();
foreach ($unused_images as $image_id) {
wp_delete_attachment($image_id, true);
}
});
Этот код настроит еженедельную очистку неиспользуемых изображений.
Дополнительные советы по работе с изображениями в WordPress
Помимо удаления неиспользуемых файлов, рекомендуется:
- Оптимизировать изображения при загрузке с помощью плагинов или сервисов для сжатия без потери качества.
- Использовать современные форматы изображений, например WebP, для ускорения загрузки сайта.
- Регулярно проверять медиатеку на наличие дублей и устаревших файлов.
Для оптимизации и управления изображениями можно рассмотреть плагин Clearfy Pro, который помогает улучшить производительность и очистить базу данных.