Вопрос или проблема
У меня есть пользовательское поле для изображения, и я использую его таким образом:
<?php $item_img = get_sub_field('image'); ?>
<img src="https://wordpress.stackexchange.com/questions/278286/<?php echo $item_img ?>" />
Но я хочу использовать миниатюру изображения, установленную на 150×150 в WordPress.
Как мне это сделать с такой настройкой?
Мне нужно установить пользовательский add_image_size()
или в WordPress уже есть дублированные изображения миниатюры?
Поскольку вы используете get_sub_field()
, я предполагаю, что вы находитесь внутри have_rows()
(повторитель), в теории это должно работать так:
$image = get_sub_field('image');
<img src="https://wordpress.stackexchange.com/questions/278286/<?php echo $image["url']; ?>" alt="https://wordpress.stackexchange.com/questions/278286/<?php echo $image["alt'] ?>" />
И это то, что вы можете получить:
$image['url'] //это полное изображение
echo $image['sizes']['medium']; //среднее изображение
echo $image['sizes']['thumbnail']; //миниатюрное изображение
echo $image['sizes']['yourcustomsize']; //изображение пользовательского размера
Другой способ – использовать:
$size="full"; // (миниатюра, средний, большой, полный или пользовательский размер)
echo wp_get_attachment_image( $imageID, $size );
Теперь, если это не работает для вас, это означает, что ваши изображения все еще сохранены только как URL, а не как объект. Попробуйте заново сохранить пост/страницу, где загружено изображение, или, если у вас есть набор изображений, вам может понадобиться использовать другой плагин для повторной загрузки и создания sizes
.
Вы всегда можете отредактировать поле в Пользовательские поля > Группы полей, чтобы вернуть ID. Затем вы можете использовать его так:
<img src="https://wordpress.stackexchange.com/questions/278286/<?php echo wp_get_attachment_image_src( get_sub_field("image' ), 'thumbnail' )[0]; ?>">
Если это не под контролем, и поле установлено так, чтобы возвращать только URL, вы можете установить 2-й аргумент get_sub_field()
в false
, чтобы получить ID, поскольку ACF всегда сохраняет ID независимо от этой настройки, и установка этого в false
означает, что вы получаете сырое значение.
Так что это будет:
<?php $image_id = get_sub_field( 'image', false ); ?>
<img src="https://wordpress.stackexchange.com/questions/278286/<?php echo wp_get_attachment_image_src( $image_id,"thumbnail' )[0]; ?>">
Ответ или решение
Использование миниатюр изображений в WordPress с помощью src
Ваша задача — использовать миниатюры изображений в WordPress, когда вы работаете с методом get_sub_field()
, который, судя по всему, возвращает URL изображения. Для достижения вашей цели важно понимать, как WordPress обрабатывает изображения и их размеры.
Понимание структуры данных
Когда вы загружаете изображение в WordPress, система создает несколько его версий разных размеров, включая миниатюры (по умолчанию размером 150×150 пикселей). Однако, если get_sub_field()
возвращает только URL изображения, вам стоит изменить способ, которым вы получаете эти данные.
Изменение конфигурации поля
-
Настройка в ACF: Перейдите в настройки пользовательских полей (Custom Fields) в области управления WordPress. Убедитесь, что поле, которое вы используете для загрузки изображений, настроено на возвращение ID вместо URL. Это позволит вам получить доступ ко всем доступным размерам изображений.
-
Изменение кода: Скорректируйте ваш код следующим образом:
<?php $image_id = get_sub_field('image', false); ?>
<img src="<?php echo wp_get_attachment_image_src($image_id, 'thumbnail')[0]; ?>" alt="<?php echo get_post_meta($image_id, '_wp_attachment_image_alt', true); ?>" />
Объяснение кода:
get_sub_field('image', false)
: Здесь мы указываем второй параметрfalse
, чтобы получать ID, а не URL.wp_get_attachment_image_src($image_id, 'thumbnail')
: Эта функция возвращает массив, содержащий URL миниатюры, ее ширину и высоту. Мы обращаемся к первому элементу массива[0]
, чтобы получить URL.get_post_meta($image_id, '_wp_attachment_image_alt', true)
: Эта функция извлекает текст ALT для изображения, что полезно для SEO и доступности.
Работа с разными размерами изображений
Если задача требует использования других размеров изображений, вы можете просто заменить 'thumbnail'
на нужный размер, например, 'medium'
или 'large'
. Также можно создать собственные размеры с помощью функции add_image_size()
в файле functions.php
вашей темы.
add_image_size('custom-size', 300, 200, true);
Убедитесь, что размеры изображений созданы
Если предыдущие методы не сработали, возможно, изображения еще не сохранены в нужных размерах. Попробуйте:
- Пересохранить пост или страницу, на которой загружены изображения.
- Использовать плагин, такой как Regenerate Thumbnails, для создания отсутствующих размеров миниатюр.
Заключение
Использование миниатюр изображений в WordPress — это гибкий подход, который может быть дополнительно настроен под ваши нужды. Изменив логику получения изображения и настроив пользовательское поле, вы сможете легко получать нужные размеры изображений. Убедитесь, что ваши изображения оптимизированы и корректно отображаются для улучшения пользовательского опыта и SEO.