Функция позволяет получить изображение поста в виде HTML-тега <img>
и его атрибутами. Если для указанного поста изображения не установлено, функция вернёт пустую строку.
get_the_post_thumbnail( $post = null, $size = 'post-thumbnail', $attr = '' )
thumbnail
/ medium
/ large
— одно из стандартных размеров изображений, зарегистрированных в WordPress по умолчанию, данные размеры можно настроить в Параметры > Медиа,full
— оригинальное разрешение изображения — таким оно было загружено на сайт,array(50, 30)
. Обратите внимание, WordPress не будет создавать дубликат картинки под этот размер — вместо этого будет использоваться наиболее близкий по разрешению зарегистрированный размер картинки, подогнанный под ваши параметры с сохранением оригинальных пропорций.
array(50, 30)
. У меня самый близкий размер будет 125×125 (thumbnail
) — URL этой картинки и будет вставлен в атрибут src
. Окей, а что с пропорциями? Так как 125×125 — это квадрат, то и наша миниатюра будет квадратной, она впишется по наименьшему параметру, т.е. результат будет 30×30.<img>
, через него можно переопределить следующие HTML-атрибуты:
src
— если вам надо, можете даже заменить URL картинки.class
— класс тега <img>
, по умолчанию имеет следующие классы wp-post-image
и attachment-{размер изображения}
.alt
— по умолчанию trim(strip_tags( $attachment->post_title ))
— указывается в админке при загрузке/редактировании медиафайла.title
— по умолчанию trim(strip_tags( $attachment->post_excerpt ))
.loading
– установив в значение false
, можем отключить ленивую загрузку изображений.Лёгкий пример – выведем миниатюру поста с ID = 5:
echo get_the_post_thumbnail( 5, 'thumbnail' ); // <img width="150" height="150" src="http://ваш-сайт.ru/wp-content/uploads/2014/02/WordPress-150x150.jpg" class="attachment-thumbnail wp-post-image" alt="WordPress">
Предположим, мы хотим реализовать это на страницах категорий. Давайте немного доработаем цикл:
while( have_posts() ) : the_post(); if( has_post_thumbnail() ): echo '<a href="' . get_permalink( $post->ID ) . '">' . get_the_post_thumbnail( $post->ID, 'thumbnail') . '</a>'; endif; echo '<a href="' . get_permalink( $post->ID ) . '">' . $post->post_title . '</a>'; endwhile;
В этом примере я также использовал функцию has_post_thumbnail() для того, чтобы в случае отсутствия миниатюры код не выводил лишний тег <a>
.
Код из этого примера отлично подойдет для использования в каком-нибудь плагине jQuery, например fancybox или pretty photo. В таком случае вам возможно также понадобится добавить класс для ссылки.
if ( has_post_thumbnail()) { // опять проверка, установлена ли миниатюра для текущего поста $large_image = wp_get_attachment_image_src( get_post_thumbnail_id(), 'large'); echo '<a href="' . $large_image[0] . '">' . get_the_post_thumbnail($post->ID, 'thumbnail') . '</a>'; }
Вы также можете ознакомиться с документацией функций wp_get_attachment_image_src() и get_post_thumbnail_id() на моем блоге.
Давайте добавим на наши миниатюры класс align-left
типа для того,чтобы они обтекались текстом слева:
$attr = array( 'class' => 'align-left' ); echo get_the_post_thumbnail( 1, 'thumbnail', $attr ); // выведет: <img width="150" height="150" src="http://ваш-сайт.ru/wp-content/uploads/2014/02/WordPress-150x150.jpg" class="align-left wp-post-image" alt="WordPress"> // обратите внимание, что стандартный класс wp-post-image никуда не делся
Фильтр позволяет задать размер миниатюр, используемых на блоге (везде на блоге).
$size = apply_filters( 'post_thumbnail_size', $size );
В следующем примере мы устанавливаем размер для всех миниатюр на блоге medium
:
function true_set_medium_size( $size ){ return 'medium'; } add_filter('post_thumbnail_size', 'true_set_medium_size', 10, 1);
А теперь пример со следующим условием: для всех миниатюр на блоге, которые выводятся через функцию get_the_post_thumbnail()
с параметром $size равным thumbnail
заменяем размер на medium
, остальные размеры миниатюр не трогаем:
function true_set_medium_size_for_thumbnais( $size ){ if( $size == 'thumbnail') return 'medium'; } add_filter('post_thumbnail_size', 'true_set_medium_size_for_thumbnais', 10, 1);
О, а вот этот фильтр — уже что-то интересное, он позволяет нам модифицировать HTML миниатюры непосредственно перед тем, как функция его возвращает.
return apply_filters( 'post_thumbnail_html', $html, $post_id, $post_thumbnail_id, $size, $attr );
Количество параметров данного фильтра не может не радовать, это означает, что мы можем творить с возвращаемым HTML-кодом всё, что нам угодно.
Рассмотрим пару примеров, в первом – автоматически проставим ссылки на посты.
Фишка в том, что каждый раз при использовании функции get_the_post_tumbnail()
миниатюры уже будут возвращаться с автоматически проставленными ссылками на пост.
function true_auto_linking( $html, $post_id, $post_thumbnail_id, $size, $attr ){ return '<a href="' . get_permalink( $post_id ) . '">' . $html . '</a>'; } add_filter('post_thumbnail_html', 'true_auto_linking', 10, 5);
Круто, да? А главное — всё очень просто.
Во втором примере сделаем так, чтобы функция возвращала только URL миниатюры.
Ещё одна полезная вещь, которую можно сделать при помощи фильтра post_thumbnail_html
. Допустим, нам не нужен весь HTML-код с тегом <img>
, допустим, нам нужен только URL. В таком случае:
function true_thumbnail_url_only( $html ){ // неиспользуемые параметры можно не указывать return preg_replace('#.*src="([^\"]+)".*#', '\1', $html ); } add_filter('post_thumbnail_html', 'true_thumbnail_url_only', 10, 5);
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Доброе время суток. Подскажите, как миниатюры автоматически делать ссылками на (единственный) файл в посте (в моем случае PDF)?
Здравствуйте!
Помогите пожалуйста настроить миниатюру ссылкой, вот кусок кода из content.php
Здравствуйте!
Для текущего поста:
спасибо. написал в почту.
Добрый день, помогите настроить миниатюру ссылкой что нужно заменить, заранее благодарна.
Вот полный код
Добрый день!
Как вывести текстом размеры оригинальной картинки, которая добавлена в пост в виде миниатюры, например, рядом колонка, разрешения картинки: 200x340 (сайт посвящен галереи, по-этому для каждого поста нужна информация о размерах картинки, один пост - одна картинка, похожее badfon.ru)
Функция wp_get_attachment_image_src() позволяет это сделать.
Здравствуйте! Буду примного благодарен если сможете мне помочь с моей проблемой...
Во время добавления изображения в пост из медиагалереи, автоматически подставляются "height" и ''weight".
Можно ли сделать так, чтобы добавляемые изображения имели вид:
и не приходилось каждый раз руками все это удалять...
Заранее спасибо!
Здравствуйте!
Да, можно, решение здесь misha.agency/wordpress/attachments-html.html
Подскажите как можно прописать отображение миниатюры к текущей записи на блоге при постинге в социальные сети:
Чтобы Вы меня правильно поняли, вот так можно задать определенную картинку:
А мне нужно чтобы вместо картинки подставлялась миниатюра которая используется в данной записи, Спасибо!
Примерно так:
Спасибо за код вроде работает, проблема возникла только с google+, ну это уже другая история. Кстати на просторах инета нашел еще вот такой вариант что скажите:
Тот же cамый вариант, только слишком много переменных задается зачем-то.
Спасибо! Тогда буду использовать Ваш вариант.
Описание функций вы найдёте у меня на сайте.
подскажите как удалить стандартный класс wp-post-image ?
вывожу миниатюру для анонса так
А выводите через функцию wp_get_attachment_image_src().
а как? я мало разбираюсь в php
куда это всё добавить?
Здравствуйте! Подскажите пожалуйста как изменить этот код чтобы ссылка, кликая на миниатюру товара работала только в каталоге товара, а на странице самого товара не работала? Спасибо!
Здравствуйте!
Этот код сам по себе неправильный (или просто так вырван из контекста) :)
А вообще думаю достаточно в самом начале кода добавить
if( !is_singular() )
Спасибо, но не помогло =)
Не можете тогда подсказать как сделать правильно, чтобы ссылка, кликая на миниатюру товара работала только в каталоге товара, а на странице самого товара не работала?
Это надо смотреть код сайта, к сожалению так трудно что-то точно сказать :)
Миша подскажите,
Как правильно вывести ссылку на картинку привязанную к посту (как дополнительная миниатюра) в headere в тегах
я вот так вывожу:
У меня естессно получается:
Из этого мне нужна только ссылка на картинку как убрать все остальное? Спасибо!
То есть должно получиться:
Иван, привет.
Если, я не ошибаюсь то тебе нужно сделать так:
Можно добавить еще проверку "есть ли миниатюра?", если нет то отдавать в соц сеть заглушку.
Здорово! Спасибо работает! А не поможете "с заглушкой", а то это у меня еще полдня займет.. на поиски решения, как добавить такую проверку
Просто сделайте проверку функцией has_post_thumbnail().
Если миниатюра есть, вставляется код выше, если же нету, то просто HTML-тег с заглушкой.
Супер! спасибо
Мыша у меня к посту прикреплены 4 картинки, почему при
Сайт выводит основной thumbnail поста а не картинку с id "uploader_custom"
Это как понимать? :)
Если смотреть ваш код, то в нём и выводится основной thumbnail поста с размером изображения "uploader_custom". Так что в данном случае я не совсем понимаю задачу.
Помимо описанного выше функционала, для WP 5.6 и выше можно улучшить LCP, отключив Lazy Load заглавной картинки:
Спасибо, добавил + обновил пост