Вопрос или проблема
Я использую ACF для получения изображений с помощью ‘wp_get_attachment_image_src’, как показано ниже:
<?php $image = wp_get_attachment_image_src(get_field('image'), 'large'); ?>
<img src="https://wordpress.stackexchange.com/questions/128918/<?php echo $image[0]; ?>" alt="" />
Какой бы размер изображения я ни ввел (здесь это ‘large’, но это может быть пользовательский размер изображения), если загруженное изображение оказалось меньше заданного размера, этот размер не будет создан, и WordPress будет использовать полное, оригинальное, не сжатое изображение в качестве запасного варианта.
Это очень нежелательно, так как изображение часто будет без сжатия и иметь очень большой размер файла без необходимости.
Какие есть обходные пути для этого? Могу ли я заставить WordPress создать изображение полного пиксельного размера, но сжатое в формате jpeg, и использовать его в качестве запасного варианта?
Спасибо за вашу помощь!
Параметр SIZE в wp_get_attachment_image_src вернёт изображение, наиболее близкое к заданному.
Если вы хотите вернуть обрезанное изображение, вы можете зарегистрировать свои собственные размеры с помощью функции add_image_size().
После того как вы зарегистрируете свои размеры, вам нужно будет регенерировать все старые изображения, иначе старые изображения не будут иметь новый размер.
Вы можете сделать это с помощью плагина “Regenerate Thumbnails”.
Ответ или решение
Когда вы используете функцию wp_get_attachment_image_src
в WordPress для получения изображений, иногда возникают ситуации, когда нужный размер изображения (например, ‘large’ или пользовательский размер) отсутствует. В таких случаях WordPress по умолчанию возвращает оригинальное, не сжатое изображение, что может привести к нежелательным последствиям, связанным с загрузкой тяжелых изображений и, как следствие, увеличением времени загрузки страницы.
Проблема с размерами изображений
Вы правы, что когда загруженное изображение меньше, чем запрашиваемый размер, функция wp_get_attachment_image_src
вернет оригинальное изображение, которое часто не оптимизировано для веба. Это может существенно ухудшить производительность вашего сайта.
Решения и рекомендации
-
Создание новых размеров изображений:
Вы можете использовать функцию
add_image_size()
для регистрации новых размеров изображений в вашей теме. Например:add_image_size('custom-size', 800, 600, true); // создаст обрезанный размер 800x600
После регистрации новых размеров вам необходимо регенерировать миниатюры для всех загруженных изображений. Это можно сделать с помощью плагина Regenerate Thumbnails, который позволит преобразовать все уже загруженные изображения в разрешения, которые вы добавили.
-
Использование фильтров для получения сжатых изображений:
Вместо того чтобы напрямую запрашивать размер изображения, вы можете использовать фильтры, чтобы предоставить более логичный подход к выбору изображения. Например, вы можете проверить размер изображения и, если он меньше требуемого, возвращать заранее определённое изображение:
function custom_get_image_src($image_id, $size) { $image = wp_get_attachment_image_src($image_id, $size); if (!$image || !$image[0]) { // Попытка получить оригинальный размер и вызвать альтернативную функцию сжатия $full_image = wp_get_attachment_image_src($image_id, 'full'); if ($full_image) { $compressed_image_url = compress_image($full_image[0]); // Ваша функция сжатия return $compressed_image_url; } } return $image[0]; }
-
Создание функции сжатия изображений:
Вам понадобится реализовать функцию, которая будет обрабатывать изображение и сжимать его. Можно использовать библиотеки PHP, такие как GD или Imagick, но имейте в виду, что это может потребовать дополнительных ресурсов сервера.
-
Использование плагинов для сжатия изображений:
Существуют различные плагины, такие как Smush или Compress JPEG & PNG images, которые могут автоматически сжимать загружаемые изображения без необходимости ручной обработки. Это лучший выбор для сайтов, где производительность имеет критическое значение.
Заключение
Используя комбинацию оптимизации размеров изображений и инструменты сжатия, вы сможете эффективно управлять файлами изображений на вашем сайте и избегать проблем, связанных с большими размерами изображений. Не забывайте регистрировать новые размеры и использовать плагины для повышения производительности. Это не только улучшит опыт пользователей на вашем сайте, но и может позитивно сказаться на SEO-позициях благодаря снижению времени загрузки страниц.