В процессе работы с сайтом на WordPress часто накапливается огромное количество неиспользуемых и устаревших изображений. Они занимают место на сервере и могут замедлять работу сайта, особенно если хранилище ограничено. В этой статье разберем, как найти и удалить старые изображения из библиотеки WordPress без использования плагинов, используя только код и запросы к базе данных.
Почему важно удалять неиспользуемые изображения
Со временем медиафайлы накапливаются, особенно при частом создании и редактировании записей. Если изображения не удалять, это ведет к:
- Занятию лишнего места на сервере;
- Усложнению управления библиотекой медиа;
- Потенциальному снижению производительности бэкапов;
- Росту времени загрузки сайта, если изображения случайно подключены или дублируются.
Удаление старых и неиспользуемых изображений помогает поддерживать порядок и оптимизировать сайт.
Как определить старые изображения в WordPress
Для начала нам нужно определить, какие изображения считать старыми. Чаще всего это файлы, которые не используются в текущих постах и страницах, и которые были загружены давно. Мы можем фильтровать изображения по дате загрузки и проверить их использование на сайте.
Основные параметры для поиска:
- Дата загрузки — например, изображения старше 1 года.
- Использование — изображения, которые не вставлены ни в один пост или страницу.
Определение по дате загрузки
Дата загрузки хранится в поле post_date таблицы wp_posts для типа записи attachment. Мы можем написать SQL-запрос, чтобы выбрать все изображения, загруженные до определённой даты.
Определение использования изображения
Использование можно проверить поиском по содержимому постов и страниц, где встречается URL изображения. Если изображение нигде не используется, его можно считать кандидатом на удаление.
Практическое решение: поиск и удаление старых неиспользуемых изображений
Разработаем функцию wpcource_delete_old_unused_images(), которая найдет и удалит изображения старше года и не используемые в контенте.
function wpcource_delete_old_unused_images() {
global $wpdb;
// Дата год назад
$date_limit = date('Y-m-d H:i:s', strtotime('-1 year'));
// Получаем все вложения (изображения) старше года
$attachments = $wpdb->get_results($wpdb->prepare(
"SELECT ID, guid FROM {$wpdb->posts} WHERE post_type = 'attachment' AND post_mime_type LIKE 'image/%' AND post_date < %s",
$date_limit
));
$deleted_count = 0;
foreach ($attachments as $attachment) {
// Проверяем, используется ли изображение в контенте
$image_url = esc_sql($attachment->guid);
$usage_count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
'%' . $wpdb->esc_like($image_url) . '%'
));
if ($usage_count == 0) {
// Удаляем изображение без перемещения в корзину
wp_delete_attachment($attachment->ID, true);
$deleted_count++;
}
}
return "Удалено изображений: " . $deleted_count;
}Эту функцию можно запустить из административной части сайта, например, подключив к кастомному админ-экшену или временно в functions.php.
Полезные рекомендации при удалении изображений
Резервное копирование
Перед массовым удалением файлов обязательно сделайте резервную копию сайта и базы данных. Это позволит восстановить данные в случае ошибки.
Проверка использования
Иногда изображения могут использоваться в виджетах, настройках темы или плагинах, которые не учитываются при простом поиске по постам и страницам. Рекомендуется дополнительно проверить такие места.
Пошаговое удаление
Если на сайте очень много изображений, удаляйте порциями, чтобы избежать перегрузки сервера и проблем с памятью.
Альтернативные способы и плагины для управления медиа
Если вы предпочитаете использовать плагины, можно обратить внимание на следующие решения:
- Media Cleaner — помогает находить и удалять неиспользуемые медиафайлы.
- Clearfy Pro — оптимизационный плагин с функциями очистки и управления.
Однако ручной метод через код дает полный контроль и не добавляет лишних плагинов на сайт.
Заключение по техническому решению удаления старых изображений
Удаление старых неиспользуемых изображений — важная задача для поддержания производительности и порядка на WordPress-сайте. Используя приведенный в статье код, вы сможете самостоятельно проводить чистку библиотеки медиа без сторонних инструментов. Главное — тщательно проверять каждое действие и делать резервные копии.