В процессе работы с WordPress накапливается большое количество изображений, которые со временем могут стать неактуальными или неиспользуемыми. Это приводит к росту размера медиатеки и замедлению сайта. В этой статье мы рассмотрим, как автоматически находить и удалять такие нерабочие изображения, используя практические примеры кода и рекомендации по плагинам.
Почему важно удалять неиспользуемые и битые изображения
Неиспользуемые изображения занимают место на сервере и замедляют резервное копирование, а битые — могут негативно влиять на пользовательский опыт. Регулярная очистка медиатеки помогает поддерживать сайт в оптимальном состоянии, ускоряет загрузку страниц и снижает нагрузку на хостинг.
Автоматизация этой задачи позволит избежать ручного поиска таких файлов и сэкономит время разработчиков и администраторов.
Как определить неиспользуемые и битые изображения в WordPress
К неиспользуемым относятся файлы, которые загружены в медиатеку, но не вставлены ни в какие записи, страницы, виджеты или другие части сайта.
Битые изображения — это файлы, на которые ссылаются записи, но которые не существуют на сервере (удалены вручную или повреждены).
Для поиска таких файлов можно использовать как плагины, так и собственный код.
Использование плагинов для поиска неиспользуемых изображений
Одним из популярных решений является плагин Clearfy Pro. Он включает в себя функцию очистки медиатеки от неиспользуемых медиафайлов с возможностью фильтрации по дате, размеру и типу.
Другой вариант — плагин Media Cleaner, который сканирует базу данных и файлы на сервере, выявляя неиспользуемые изображения и предоставляя удобный интерфейс для их удаления.
Пример функции для поиска неиспользуемых изображений в медиатеке
Ниже представлен пример функции с префиксом wpmy_, которая сканирует все изображения в медиатеке и проверяет, используются ли они в записях и страницах:
function wpmy_find_unused_images() {
global $wpdb;
$unused_images = [];
// Получаем все вложения типа image
$images = $wpdb->get_results("SELECT ID, guid FROM {$wpdb->posts} WHERE post_type = 'attachment' AND post_mime_type LIKE 'image/%'");
foreach ($images as $image) {
$id = $image->ID;
$url = $image->guid;
// Ищем ссылки на изображение в контенте всех постов
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
'%' . $wpdb->esc_like($url) . '%'
));
// Если в контенте нет ссылок, добавляем в список неиспользуемых
if (intval($count) === 0) {
$unused_images[] = [
'ID' => $id,
'url' => $url
];
}
}
return $unused_images;
}Эта функция возвращает массив с ID и URL изображений, которые не используются в содержимом сайта. Можно доработать функцию, чтобы учитывать ссылки в виджетах, пользовательских полях и других местах.
Автоматическое удаление неиспользуемых изображений по расписанию
Для автоматизации удаления можно создать WP-Cron задачу, которая будет запускать удаление неиспользуемых медиафайлов регулярно. Ниже пример кода, который удаляет найденные неиспользуемые изображения:
function wpmy_delete_unused_images() {
$unused_images = wpmy_find_unused_images();
foreach ($unused_images as $image) {
wp_delete_attachment($image['ID'], true); // true — удаляет физический файл
}
}
// Регистрируем крон задачу при активации темы или плагина
function wpmy_schedule_image_cleanup() {
if (!wp_next_scheduled('wpmy_image_cleanup_event')) {
wp_schedule_event(time(), 'daily', 'wpmy_image_cleanup_event');
}
}
add_action('wp', 'wpmy_schedule_image_cleanup');
// Хук для выполнения удаления
add_action('wpmy_image_cleanup_event', 'wpmy_delete_unused_images');Этот код можно добавить в файл functions.php вашей темы или создать отдельный плагин. Он будет ежедневно проверять и удалять неиспользуемые изображения.
Проверка битых ссылок на изображения
Битые изображения — это когда ссылка на файл есть, а файл на сервере отсутствует. Чтобы выявить такие случаи, можно проверить существование файла по пути, хранящемуся в базе данных.
Пример функции для проверки битых изображений:
function wpmy_find_broken_images() {
global $wpdb;
$broken_images = [];
// Получаем все вложения типа image
$images = $wpdb->get_results("SELECT ID, guid FROM {$wpdb->posts} WHERE post_type = 'attachment' AND post_mime_type LIKE 'image/%'");
foreach ($images as $image) {
$file_path = str_replace(site_url('/'), ABSPATH, $image->guid);
if (!file_exists($file_path)) {
$broken_images[] = [
'ID' => $image->ID,
'url' => $image->guid
];
}
}
return $broken_images;
}Вы можете использовать эту функцию аналогично предыдущей, чтобы удалять битые изображения и очищать медиатеку от мусора.
Рекомендации и советы по работе с медиатекой
Для профилактики появления неиспользуемых и битых изображений придерживайтесь следующих правил:
- Используйте плагин Clearfy Pro для регулярной очистки и оптимизации медиатеки.
- Перед удалением всегда делайте резервные копии сайта и базы данных.
- Старайтесь вставлять изображения через стандартные средства WordPress, чтобы ссылки корректно сохранялись.
- Регулярно проверяйте сайт на наличие битых ссылок с помощью специализированных инструментов и плагинов.
- Автоматизируйте задачи с помощью WP-Cron, чтобы не забывать о поддержании чистоты медиатеки.
Используя эти методы и примеры, вы сможете эффективно управлять изображениями на своем сайте, снижая нагрузку и улучшая производительность WordPress.