Одной из часто возникающих проблем при длительной работе сайта на WordPress становится накопление в медиабиблиотеке проблемных изображений: битых файлов, очень больших по размеру, либо дублирующихся, которые замедляют работу сайта и занимают лишнее место на сервере. В этой статье мы подробно рассмотрим, как автоматически находить и удалять такие изображения с помощью кода и плагинов, чтобы оптимизировать ваш сайт и улучшить производительность.
Почему важно удалять проблемные изображения из WordPress
Проблемные изображения могут негативно влиять на работу сайта и его SEO. К ним относятся:
- Файлы с ошибками загрузки или поврежденные изображения;
- Слишком большие по весу файлы, замедляющие загрузку страниц;
- Дублирующиеся файлы, которые занимают дополнительное место;
- Изображения, которые не используются ни в одном посте или странице.
Удаление таких файлов помогает не только очистить пространство на хостинге, но и повысить скорость загрузки сайта, что положительно скажется на поведении пользователей и ранжировании в поисковых системах.
Автоматизация поиска и удаления проблемных изображений с помощью кода
Для автоматического удаления битых и неиспользуемых изображений мы можем написать функцию, которая будет проверять файлы в медиабиблиотеке, выявлять проблемные и удалять их.
Определение битых изображений
Для проверки, является ли изображение битым, можно попытаться загрузить его с помощью функции wp_get_image_editor(). Если она возвращает ошибку, значит изображение повреждено.
function wpblog_check_and_delete_broken_images() {
$args = [
'post_type' => 'attachment',
'post_mime_type' => 'image',
'posts_per_page' => -1,
'post_status' => 'inherit',
];
$query = new WP_Query($args);
if (!$query->have_posts()) {
return;
}
while ($query->have_posts()) {
$query->the_post();
$attachment_id = get_the_ID();
$file_path = get_attached_file($attachment_id);
if (!$file_path || !file_exists($file_path)) {
// Файл отсутствует, удаляем запись
wp_delete_attachment($attachment_id, true);
continue;
}
$image_editor = wp_get_image_editor($file_path);
if (is_wp_error($image_editor)) {
// Изображение битое, удаляем
wp_delete_attachment($attachment_id, true);
}
}
wp_reset_postdata();
}
Эту функцию можно запускать вручную или по расписанию с помощью wp_cron.
Удаление неиспользуемых изображений
Для выявления неиспользуемых изображений можно использовать плагин Clearfy Pro с функцией очистки медиабиблиотеки. Однако можно реализовать и собственное решение.
Основная идея — проверить, используется ли attachment ID в контенте сайта, и если нет — удалить.
function wpblog_delete_unused_images() {
global $wpdb;
$attachments = get_posts([
'post_type' => 'attachment',
'post_mime_type' => 'image',
'posts_per_page' => -1,
'post_status' => 'inherit',
]);
foreach ($attachments as $attachment) {
$attachment_id = $attachment->ID;
// Проверяем, встречается ли ID в контенте
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
'%wp-image-' . $attachment_id . '%'
));
if ($count == 0) {
// Не используется, удаляем
wp_delete_attachment($attachment_id, true);
}
}
}
Подобные функции можно запускать с интервалом, например, раз в месяц, чтобы поддерживать медиабиблиотеку в порядке.
Использование плагинов для управления и оптимизации изображений
Если вы предпочитаете готовые решения, обратите внимание на следующие плагины:
- Media Cleaner — плагин для поиска и удаления неиспользуемых и битых медиафайлов. Позволяет безопасно очищать медиабиблиотеку и интегрируется с популярными плагинами.
- Imagify — решает проблему оптимизации и сжатия изображений, что уменьшает вес файлов и ускоряет загрузку сайта.
- Regenerate Thumbnails — полезен, если требуется пересоздать миниатюры после изменения настроек размеров изображений.
В сочетании с нашими функциями эти плагины помогут поддерживать медиабиблиотеку в оптимальном состоянии.
Оптимизация больших изображений: автоматическое сжатие и ресайз
Помимо удаления битых и ненужных файлов, важно контролировать размер загружаемых изображений. Для этого можно использовать автоматическое сжатие и ресайз.
Пример функции, которая сжимает загруженное изображение до максимальной ширины 1200px:
function wpblog_resize_uploaded_image($file) {
$max_width = 1200;
$image_editor = wp_get_image_editor($file['file']);
if (is_wp_error($image_editor)) {
return $file;
}
$size = $image_editor->get_size();
if ($size['width'] > $max_width) {
$image_editor->resize($max_width, null);
$image_editor->save($file['file']);
}
return $file;
}
add_filter('wp_handle_upload_prefilter', 'wpblog_resize_uploaded_image');
Этот код можно добавить в functions.php вашей темы или в собственный плагин. Он автоматически уменьшит слишком большие изображения при загрузке.
Выводы и рекомендации
Регулярная очистка медиабиблиотеки от проблемных изображений помогает поддерживать скорость и стабильность вашего сайта. Используйте сочетание автоматического кода и проверенных плагинов для комплексного решения задачи.
Если хотите расширить функционал оптимизации, попробуйте Clearfy Pro — он содержит множество инструментов для чистки и оптимизации WordPress.