Зачем нужна оптимизация изображений в WordPress
Изображения составляют значительную часть веса веб-страниц, и если они не оптимизированы, это замедляет загрузку сайта, ухудшает пользовательский опыт и негативно влияет на SEO. Особенно это актуально для сайтов на WordPress, где часто загружаются большие по размеру фотографии и графика.
Автоматическая оптимизация позволяет настроить обработку изображений сразу при загрузке, уменьшая их размер без потери качества или с минимальными искажениями. Это освобождает от необходимости вручную сжимать каждое изображение и гарантирует одинаковое качество контента.
В этой статье мы разберём методы автоматического изменения размера и сжатия изображений в WordPress, а также рассмотрим примеры плагинов и кастомного кода для решения этой задачи.
Основные подходы к оптимизации изображений
Автоматическое изменение размера изображений
WordPress по умолчанию создаёт несколько копий загруженного изображения разных размеров (thumbnail, medium, large и т.д.). Однако нередко исходники слишком большие и занимают много места на сервере и в базах данных.
Рекомендуется дополнительно ограничивать максимальный размер загружаемых изображений и при необходимости программно изменять размеры до нужных параметров.
Для этого можно использовать хуки WordPress, например wp_handle_upload_prefilter для проверки размера файла перед загрузкой, и функцию wpmy_resize_image_on_upload для изменения размера изображения сразу после загрузки.
function wpmy_resize_image_on_upload($metadata, $attachment_id) {
$upload_dir = wp_upload_dir();
$file_path = $upload_dir['basedir'] . '/' . $metadata['file'];
$max_width = 1200; // Максимальная ширина
$image = wp_get_image_editor($file_path);
if (!is_wp_error($image)) {
$size = $image->get_size();
if ($size['width'] > $max_width) {
$image->resize($max_width, null, false);
$image->save($file_path);
// Обновляем метаданные размера
$metadata['width'] = $max_width;
$metadata['height'] = intval($size['height'] * ($max_width / $size['width']));
}
}
return $metadata;
}
add_filter('wp_generate_attachment_metadata', 'wpmy_resize_image_on_upload', 10, 2);Сжатие изображений без потери качества
Для сжатия изображений существует множество сервисов и библиотек, которые можно интегрировать с WordPress. Одним из популярных решений является использование плагинов, которые автоматически сжимают изображения при загрузке.
Примеры:
- Smush — популярный плагин для сжатия и оптимизации изображений без потери качества. Позволяет настроить массовую оптимизацию и автоматическую обработку при загрузке.
- ShortPixel — один из лучших плагинов с мощным алгоритмом сжатия. Поддерживает WebP и другие форматы.
- Imagify — плагин от создателей WP Rocket, оптимизирует изображения и преобразует их в современные форматы.
Однако если вы хотите встроить сжатие в свой плагин или тему, можно использовать PHP-библиотеки, например imagick или gd, для сжатия и обработки изображений на сервере.
function wpmy_compress_image($file_path) {
$image = wp_get_image_editor($file_path);
if (!is_wp_error($image)) {
// Устанавливаем качество сжатия 80%
$image->set_quality(80);
$image->save($file_path);
}
}Интеграция с плагином Clearfy Pro для оптимизации
Плагин Clearfy Pro содержит модули для оптимизации загрузки изображений, включая задержку загрузки (lazy load) и отключение масштабирования больших изображений.
Clearfy Pro можно настроить так, чтобы автоматически изменять размеры изображений и оптимизировать их без потери качества, что значительно улучшает скорость загрузки сайта. Кроме того, плагин помогает избавиться от лишних метаданных в изображениях, что дополнительно сокращает размер файлов.
Практические рекомендации по оптимизации изображений
Выбор формата изображения
Используйте современные форматы изображений, такие как WebP, которые обеспечивают лучшее сжатие без потери качества. WordPress с версии 5.8 поддерживает WebP — достаточно просто загружать файлы в этом формате или конвертировать их автоматически с помощью плагинов.
Плагины, например, WPRemark, могут помочь автоматически преобразовывать изображения в WebP и внедрять их в страницы.
Lazy Load — отложенная загрузка изображений
Отложенная загрузка (lazy load) позволяет загружать изображения только при прокрутке страницы до них. Это снижает время первоначальной загрузки страницы и экономит трафик пользователя.
WordPress с версии 5.5 имеет встроенную поддержку lazy load через атрибут loading="lazy". Также можно использовать плагины для расширенной настройки, например, WPStories или My Popup с поддержкой оптимизации загрузки контента.
Кэширование и CDN
Оптимальные результаты достигаются в комплексе с кэшированием и использованием CDN (Content Delivery Network). Это позволяет быстро доставлять оптимизированные изображения из ближайших серверов к пользователю.
Рекомендуется использовать плагины для кэширования, которые интегрируются с CDN, например, WP Rocket или встроенные возможности Clearfy Pro.
Автоматизация оптимизации изображений с помощью WPMy: пример расширенного кода
Ниже пример расширенной функции, которая автоматически изменяет размер, сжимает и конвертирует изображения в WebP при их загрузке, используя стандартные средства WordPress и Imagick, если он доступен:
function wpmy_optimize_uploaded_image($metadata, $attachment_id) {
$upload_dir = wp_upload_dir();
$file_path = $upload_dir['basedir'] . '/' . $metadata['file'];
$max_width = 1200;
$image = wp_get_image_editor($file_path);
if (is_wp_error($image)) {
return $metadata;
}
$size = $image->get_size();
if ($size['width'] > $max_width) {
$image->resize($max_width, null, false);
$image->set_quality(80);
$image->save($file_path);
$metadata['width'] = $max_width;
$metadata['height'] = intval($size['height'] * ($max_width / $size['width']));
}
// Конвертация в WebP, если доступен Imagick
if (class_exists('Imagick')) {
try {
$imagick = new Imagick($file_path);
$webp_path = preg_replace('/\.(jpe?g|png)$/i', '.webp', $file_path);
$imagick->setImageFormat('webp');
$imagick->setImageCompressionQuality(80);
$imagick->writeImage($webp_path);
$imagick->clear();
$imagick->destroy();
} catch (Exception $e) {
// Ошибка конвертации - игнорируем
}
}
return $metadata;
}
add_filter('wp_generate_attachment_metadata', 'wpmy_optimize_uploaded_image', 10, 2);Эта функция гарантирует, что все загруженные изображения будут иметь оптимальный размер и качество, а также дополнительный WebP-файл для современных браузеров.
Заключение по теме оптимизации изображений
Автоматическая оптимизация изображений в WordPress — ключ к быстрому и удобному сайту. Используя комбинацию собственного кода и проверенных плагинов, таких как Clearfy Pro, WPRemark или Smush, можно значительно сократить время загрузки страниц и улучшить позиции в поиске.
Рекомендуется тестировать различные методы на вашем хостинге, чтобы подобрать оптимальный баланс между качеством и скоростью. Помните, что оптимизация — это постоянный процесс, и важно регулярно проверять изображения и обновлять инструменты.