WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

get_the_post_thumbnail() WP 2.9.0

Получает IMG тег миниатюры поста, если она существует.

Получает миниатюру поста, которая установлена на странице редактирования записи и формирует html код картинки <img> на основе полученной ссылки на миниатюру. Если миниатюру получить не удалось (она не установлена), то будет возвращен пустой результат ''.

Заметка! Чтобы для поста можно было определить картинку миниатюру, нужно активировать такую возможность функцией add_theme_support( 'post-thumbnails' ); в файле шаблона funсtions.php.

Когда нужно получить только URL картинки, используйте get_the_post_thumbnail_url().

Когда в теме добавляется поддержка post-thumbnail, регистрируется специальный размер изображения post-thumbnail, который отличается от размера thumbnail, управляемого через Настройки > Медиа. При использовании этой или связанных функций, используется этот размер post-thumbnail.

Стилизация миниатюр

Миниатюры создаваемые этой функцией получают класс wp-post-image (class="wp-post-image"). Также, устанавливается класс в зависимости от размера миниатюры. В CSS миниатюры стилизуются через следующие селекторы:

img.wp-post-image
img.attachment-thumbnail
img.attachment-medium
img.attachment-large
img.attachment-full

Также можно задать свой класс:

<?php echo get_the_post_thumbnail( $id, 'thumbnail', array('class' => 'alignleft') ); ?>
Является основой для: the_post_thumbnail()
Работает на основе: wp_get_attachment_image(), get_post_thumbnail_id()
✈ 1 раз = 0.001687с = очень медленно | 50000 раз = 5.72с = быстро | PHP 7.1.5, WP 4.8.2
Хуки из функции
Возвращает

Строку.

  • HTML код картинки <img>.
  • Пустую строку, если не удалось найти картинку миниатюру записи.

Использование

$thumbnail = get_the_post_thumbnail( $id, $size, $attr );
$id(число/WP_Post)
ID или объект поста, миниатюру которого надо получить.
По умолчанию: null (ID текущего поста)
$size(строка/массив)

Размер необходимой миниатюры:

  • Можно указать строку: thumbnail, medium, large или full.
  • Или массив из двух элементов, обозначающих размер миниатюры (ширину и высоту): array(32, 32).

По умолчанию: 'post-thumbnail'

$attr(строка/массив)

Строка в виде запроса или массив аргументов, которые определят атрибуты тега img.

$default_attr = array(
	'src'   => $src,
	'class' => "attachment-$size",
	'alt'   => trim(strip_tags( $attachment->post_excerpt )),
	'title' => trim(strip_tags( $attachment->post_title )),
);

По умолчанию: ''

Примеры

#1 Что вернет функция

$thumb = get_the_post_thumbnail( 6462, 'thumbnail' );

/* $thumb будет равен
<img
	width="80" height="80"
	src="/wp-content/uploads/2016/07/http-api-80x80.png"
	class="attachment-thumbnail size-thumbnail wp-post-image"
	alt="WordPress HTTP API"
/>
*/

#2 Базовый пример использования

<?php $pages = get_pages(array( 'child_of'=>1 )); ?>
<ul>
	<?php foreach( $pages as $page ){ ?>
		<li>
			<?php echo get_the_post_thumbnail( $page->ID, 'thumbnail'); ?>
			<h1><?php echo get_the_title($page); ?></h1>
			<?php echo get_the_excerpt($page); ?>
		</li>
	<?php } ?>
</ul>

#3 Размеры миниатюр

Размеры для картинок в WordPress обозначаются условно:

  • thumbnail - маленькая миниатюра;
  • medium - средняя;
  • large - большая;
  • full - оригинал, картинка которую мы загружали.

Указать конкретные размеры в пикселях для каждого типа можно в настройках (Параметры > мадиафайлы).

Эти примеры показывают, как можно получить картинку нужного размера:

get_the_post_thumbnail( $id );         // без параметра $size

get_the_post_thumbnail( $id, 'thumbnail' );     // маленькая миниатюра
get_the_post_thumbnail( $id, 'medium' );        // среднего размера
get_the_post_thumbnail( $id, 'large' );         // большого размера

get_the_post_thumbnail( $id, array(100,100) ); // произвольный размер

Код get the post thumbnail: wp-includes/post-thumbnail-template.php WP 5.2.2

<?php
function get_the_post_thumbnail( $post = null, $size = 'post-thumbnail', $attr = '' ) {
	$post = get_post( $post );
	if ( ! $post ) {
		return '';
	}
	$post_thumbnail_id = get_post_thumbnail_id( $post );

	/**
	 * Filters the post thumbnail size.
	 *
	 * @since 2.9.0
	 * @since 4.9.0 Added the `$post_id` parameter.
	 *
	 * @param string|array $size    The post thumbnail size. Image size or array of width and height
	 *                              values (in that order). Default 'post-thumbnail'.
	 * @param int          $post_id The post ID.
	 */
	$size = apply_filters( 'post_thumbnail_size', $size, $post->ID );

	if ( $post_thumbnail_id ) {

		/**
		 * Fires before fetching the post thumbnail HTML.
		 *
		 * Provides "just in time" filtering of all filters in wp_get_attachment_image().
		 *
		 * @since 2.9.0
		 *
		 * @param int          $post_id           The post ID.
		 * @param string       $post_thumbnail_id The post thumbnail ID.
		 * @param string|array $size              The post thumbnail size. Image size or array of width
		 *                                        and height values (in that order). Default 'post-thumbnail'.
		 */
		do_action( 'begin_fetch_post_thumbnail_html', $post->ID, $post_thumbnail_id, $size );
		if ( in_the_loop() ) {
			update_post_thumbnail_cache();
		}
		$html = wp_get_attachment_image( $post_thumbnail_id, $size, false, $attr );

		/**
		 * Fires after fetching the post thumbnail HTML.
		 *
		 * @since 2.9.0
		 *
		 * @param int          $post_id           The post ID.
		 * @param string       $post_thumbnail_id The post thumbnail ID.
		 * @param string|array $size              The post thumbnail size. Image size or array of width
		 *                                        and height values (in that order). Default 'post-thumbnail'.
		 */
		do_action( 'end_fetch_post_thumbnail_html', $post->ID, $post_thumbnail_id, $size );

	} else {
		$html = '';
	}
	/**
	 * Filters the post thumbnail HTML.
	 *
	 * @since 2.9.0
	 *
	 * @param string       $html              The post thumbnail HTML.
	 * @param int          $post_id           The post ID.
	 * @param string       $post_thumbnail_id The post thumbnail ID.
	 * @param string|array $size              The post thumbnail size. Image size or array of width and height
	 *                                        values (in that order). Default 'post-thumbnail'.
	 * @param string       $attr              Query string of attributes.
	 */
	return apply_filters( 'post_thumbnail_html', $html, $post->ID, $post_thumbnail_id, $size, $attr );
}

Cвязанные функции

Из метки: thumbnail (image картинки-миниатюры)

Еще из раздела: Миниатюры

Еще из тегов шаблона: Миниатюры Вложения

46 комментов
Полезные 4 Вопросы 1 Все
  • ProSEOBlogger

    Есть функция, которая создает миниатюру картинки. Она ищет первую попавшуюся картинку в посте. Если нету таковой, то выводит заглушки или еще чего (вариантов куча). Причем, неважно как сама картинка публиковалась в пост. Она может быть вставлена как код после публикации (не через админку движа WP).

    Неудобство сей функции в том, что для нее нужно ставить плагин AutoThumb, а также сами урлы картинок выходят не красивые, например,

    <img width="80px" height="60px" title="" alt="" src="http://site.ru/wp-content/plugins/autothumb/image.php?src=/wp-content/uploads/123.jpg&w=80&h=60&zc=1&q=90&hash=05453397122a1d7df1134ad7e0f6b402" class="alignleft">

    . По сути, создается хеш картинки.

    Других вариантов я не нашел в сети. Тот, что есть в журнальных темах (TimThumb) урлы картинок еще хуже создает и он не умеет автоматом находить картинку.

    Автоматическое нахождение картинки и формирование из нее thumb - это удобно и не надо привязываться к созданию миниатюр и т.д..

    Работает ли эта функция для картинок, которые произвольно вставляются в статью? Скажем, для спарсенных картинок. Есть ли у тебя такая реализация и какие урлы формируются на выходе?

    Ответить7.9 лет назад #
  • ProSEOBlogger

    Работает плагин smile Просто отлично. Еще пару тестов и поставлю его на все мои сайты. Мега респект тебе, Каma smile

    Ответить7.9 лет назад #
  • Ram cайт: i-news.com.ua

    Подскажите как реализовать миниатюры в виде ссылок на пост. Заранее спасибо crazy

    Ответить7.5 лет назад #
    • petrozavodsky784 cайт: alkoweb.ru

      вопрос сложный. Примерно так:

      <a href="<?php the_permalink() ?>" title="<?php the_title(); ?>">
      
      <?php the_post_thumbnail(); ?>
      
      </a>
      Ответить7.2 лет назад #
  • petrozavodsky784 cайт: alkoweb.ru

    У меня вопрос получше к автору а есть ли возможность получить id изображения которое используется в качестве миниатюры текущего поста. то есть есть пост с id = 10 и к нему миниатюрка прикреплена id картинки которой =20 так вот интересует как получить эти самые 20 можно ли так сделать?

    -1
    Ответить7.2 лет назад #
  • Николай
    1. А как мне полученное из поста изображение через the_post_thumbnail() затем в посте удалить?
    2. А если в посте несколько изображений? Что выдаст the_post_thumbnail()?
    Ответить6.7 лет назад #
    • campusboy3345 cайт: www.youtube.com/c/wpplus

      the_post_thumbnail() (картинку) вы задаете при написании поста на выбор. Если вы его не задали, то ничего не выведется.

      1
      Ответить4.4 года назад #
  • Елена cайт: perfectfood.ru

    Ваш сайт для меня просто находка! Спасибо! smile Сижу ковыряюсь в своём вордпрессе, чтобы внести некоторые улучшения на сайтах. Без вас бы не разобралась ))

    Ответить6.5 лет назад #
  • Анри

    Ребята, спасибо за статью, очень помогли)

    Ответить5.9 лет назад #
  • Сергей

    Чувак, спасибо тебе огромное за материал!!! Ооочень помог!

    Ответить5.7 лет назад #
  • Виктор cайт: raftkorn.com

    Такой вопрос - а реально вести проверку на наличие размера, и если нужного размера нет - делать его "налету"?

    Ответить4.6 года назад #
    • Kama7483

      Все реально! В каком случае это нужно делать?

      Ответить4.6 года назад #
      • Raft cайт: raftkorn.com

        Просто думаю что не очень удобно получается, в случае если записи уже есть, а диз сменили, чтоб пересоздавать картинки на существующих записях при необходимости. Или в тех случаях, когда нужно создать миниатюры только для некоторых изображений, а не для всех что грузятся. Допустим есть миниатюра которая отображается в сайтбаре/списке записей, и в этом же посте есть еще 150 картинок. Так вот нам ж не надо на те 150 создавать миниатюры разных размеров, а нужно только для главной.

        Вообще накропал себе функцию для удобства

        function raft_post_img_wp($rpiw_id, $rpiw_url=1, $rpiw_form=1, $rpiw_size='thumbnail', $rpiw_bef='', $rpiw_aft='', $rpiw_where='') {
        	$raft_post_img_wp = '';
        	if($rpiw_where == '' || $rpiw_where == 0) {
        		$rpiw_attimg = wp_get_attachment_image_src(get_post_thumbnail_id($rpiw_id), $rpiw_size);
        		$rpiw_attimg_full = wp_get_attachment_image_src(get_post_thumbnail_id($rpiw_id), 'full');
        	} else {
        		$rpiw_attimg = wp_get_attachment_image_src($rpiw_where, $rpiw_size);
        		$rpiw_attimg_full = wp_get_attachment_image_src($rpiw_where, 'full');
        	}
        	$rpiw_img = $rpiw_attimg[0];
        	$rpiw_img_full = $rpiw_attimg_full[0];
        	if($rpiw_img != '') {
        		$rpiw_urll = '';
        		$rpiw_urlr = '';
        		$rpiw_image = '';
        		if($rpiw_url == '1') {
        			$rpiw_urll = '<a href="' . get_permalink($rpiw_id) . '" title="' . get_the_title($rpiw_id) . '">';
        			$rpiw_urlr = '</a>';
        		} elseif($rpiw_url == '2') {
        			$rpiw_urll = '<a href="' . $rpiw_img_full . '" title="' . get_the_title($rpiw_id) . '">';
        			$rpiw_urlr = '</a>';
        		}
        		if($rpiw_form == '0') {
        			$rpiw_image = $rpiw_img;
        		} elseif($rpiw_form == '1') {
        			$rpiw_image = '<img src="' . $rpiw_img .'" alt="' . get_the_title($rpiw_id) . '" title="' . get_the_title($rpiw_id) . '" />';
        		} 
        		$raft_post_img_wp = $rpiw_bef . $rpiw_urll . $rpiw_image . $rpiw_urlr . $rpiw_aft;
        	}
        	return $raft_post_img_wp;
        }

        вывод

        <?php echo raft_post_img_wp($post->ID, 1, 1, array(100,100), '<div class="post_img">', '</div>'); ?>

        $post->ID - ид записи передает
        первая 1 - ссылка (0 - без ссылки, 1 - ссылка на запись, 2 - ссылка на большую картинку)
        вторая 1 - формат вывода (0 - просто ссылка на картинку, 1 - картинка )
        array(100,100) - размер (можно передавать как 'full' и т.д.)
        дальше 2 параметра - что выводить до и после картинки
        и в конце еще можно добавить цифровой параметр - ид картинки любой

        Ответить4.6 года назад #
  • Такое дело: нужно при клике на миниатюру открывать модальное окно с полноразмерным изображением (естественно не больше размера окна).

    Вопрос: как найти ссылку на полную версию миниатюры записи?

    -1
    Ответить3.5 года назад #
Здравствуйте, !     Войти . Зарегистрироваться