WordPress как на ладони
wordpress jino

get_the_post_thumbnail() WP 2.9.0

Получает html код (img) миниатюры поста, если она существует.

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

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

Используется в: 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
Хуки из функции:
Возвращает

Cтроку.

  • 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-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') ); ?>

Код get the post thumbnail: wp-includes/post-thumbnail-template.php VER 4.9.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 картинки-миниатюры)

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

get_the_post_thumbnail 37 комментариев
Полезные 3 Вопросы 2 Все
  • Александр

    Здравствуйте!
    Не подскажите, как вывести картинку в начале поста, которая установлена в качестве миниатюры, но в самой теме разработчиком не предусмотрен ее вывод в начале поста. Не судите строго, если сформулировал свой вопрос не достаточно правильно, я только учусь работать с вордпресс.

    В файл темы (loop-single.php) я вставляю код следующего вида

    <?php the_post_thumbnail('large', array('class' => 'alignleft')); ?>

    и картинка выводится перед началом текста, так как и нужно, но она не увеличивается в размере, не могу понять что именно нужно прописать в functions.php, что бы картинка установленная в качестве миниатюры выводилась и в посте перед началом текста в своем исходном размере размере.

    Использую тему zeeFlow, ссылка на тему http://business.themezee.com/themes/zeeflow/
    Заранее благодарен за ответы, советы и помощь.

    Ответить2 года назад #
    • Kama4709
      <?php the_post_thumbnail('full', array('class' => 'alignleft')); ?>
      1
      Ответить2 года назад #
      • Валерий

        Здравствуйте! Подскажите как сюда добавить отступы, к картинке?

        Ответить2 года назад #
        • lincaseidhe62 cайт: ardeya.ru

          отступы вы можете указать в файле style.css вашей темы. для этого используйте селектор который вы добавляете к картинке. например, если картинка выводится этим кодом:

          <?php the_post_thumbnail('full', array('class' => 'alignleft')); ?>

          то в style.css нужно добавить:

          .alignleft {
          	margin: 10px 10px 10px 10px; /*и установите ваши значения*/
          }
          Ответить2 года назад #
  • Михаил

    добрый день, как с помощью этой функции получить вывод картинки такого вида:

    <img src="/wp-content/uploads/изображение.jpg" class="img-responsive">

    Хочу чтобы вордпресс не добавлял никаких атрибутов и присвоил только нужный мне класс. У меня выводит сейчас такое :

    <a href="http://test.ru/1/"><img width="800" height="600" src="http://test.ru/wp-content/uploads/изображение.jpg" class="img-responsive wp-post-image" alt="2" srcset="http://test.ru/wp-content/uploads/изображение-300x225.jpg 300w, http://test.ru/wp-content/uploads/изображение-768x576.jpg 768w, http://test.ru/wp-content/uploads/изображение.jpg 800w" sizes="(max-width: 800px) 100vw, 800px"></a>

    Хочу убрать всё лишнее

    Ответить2 года назад #
  • campusboy2366 cайт: www.youtube.com/c/wpplus

    До сих пор не могу никак начать работать с фильтрами и хуками, что пишутся обычно к функциям. Вот к примеру, могу ли я перехватить вывод результата данной функции и подменить своим?

    Ответить1.4 года назад #
    • Kama4709

      Да!

      // apply_filters( 'post_thumbnail_html', $html, $post->ID, $post_thumbnail_id, $size, $attr );
      add_filter('post_thumbnail_html', function( $html, $post_id, $post_thumbnail_id, $size, $attr ){
      	// делаем что-нить с $html
      
      	return $html;
      }, 10, 5);
      1
      Ответить1.4 года назад #
      • campusboy2366 cайт: www.youtube.com/c/wpplus

        Я наверное уточню "хотелку". К примеру, есть старый сайт и там все картинки подтягиваются с других сайтов. В своей теме у меня написана функция, которая берет контент, с помощью регулярки находит 1 картинку и выводит. Эдакий аналог the_the_post_thumbnail. Но если я поставлю новую тему, где используется the_the_post_thumbnail, то хотелось бы её "перехватывать" и подставлять результат своей функции этой, дабы не перекопировать к себе на сайт картинки и не прикреплять их к записи.

        Ответить1.4 года назад #
        • Kama4709

          Это ничего не меняет... Просто в этом случает не будет параметра $post_thumbnail_id и соответственно $html будет равен ''. Т.е. тебе нужно сунуть свою функцию в этот фильтр. Если где-то нужно изменить размер на основе указанного в the_post_thumbnail() размера то опирайся на параметр $size в хуке. Т.е. будет как-то так:

          // apply_filters( 'post_thumbnail_html', $html, $post->ID, $post_thumbnail_id, $size, $attr );
          add_filter('post_thumbnail_html', 'my_thumb_hook', 10, 5);
          function my_thumb_hook( $html, $post_id, $post_thumbnail_id, $size, $attr ){
          	// если нет своей картинки у записи
          	if( ! $html ){
          		// твоя функция получения картинки записи
          		$html = my_function( $post_id );
          
          		// если твоя функцию умеет работать с размерами то
          		// $html = my_function( $post_id, $size );
          	}
          
          	return $html;
          }
          1
          Ответить1.4 года назад #
          • campusboy2366 cайт: www.youtube.com/c/wpplus

            Низкий тебе поклон. Бомба! Пашет, аж шуба заворачивается!

            1
            Ответить1.4 года назад #
  • Роман

    Добрый день. Указываю размер
    get_the_post_thumbnail( $aValue->ID, array(250, 160) )

    а миниатюра всё равно выводится большая
    например
    src="/wp-content/uploads/2016/07/http-api.png"
    а должна быть
    src="/wp-content/uploads/2016/07/http-api-250x160.png"

    Что это может быть ?

    • campusboy2366 cайт: www.youtube.com/c/wpplus

      Приветствую. Может быть не зарегистрировано близких по значению миниатюр? Ведь get_the_post_thumbnail() не режет картинку по указанным размерам, а лишь выводит указанный вариант или же пытается подобрать самый подходящий, что есть, если переданы значения высоты/ширины.

    • Роман

      Самое интересное что класс миниатюре пишет правильный
      class="attachment-250x160 size-250x160 wp-post-image"
      а src - не правильно.

      <img width="250" height="153" - ширину формирует правильно, а высоту нет - непонятно как высчитывает.

    • Kama4709

      Все тут правильно! Смотри, ты регнул размер, для него указано не кадрировать (судя по всему). Размер указан как 250x160. Миниатюра создается, но при этом подбирается наиболее подходящая сторона, в результате реальные резамеры миниатюры получаются 160x153. Далее ты просишь вывести картинку 250x160 но подходящей картинки нет, потому что ширина подходит, а высота нет. Поэтому выводится полная картинка...

      Функция не выведет картинку меньшую чем ты попросил - только большую, при этом учитываются обе стороны.

      Тебе лучше всего выводить картинку по называнию создаваемой миниатюры (при реге указывается название)... Или попробуй указать размер без высоты array(250, 0), не уверен что сработает...

      • Роман

        Добрый день. Какой же выход? Регистрировать свой размер и получать его?.

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

        Ответить4 месяца назад #
        • Kama4709

          Это зависит от начальной картинки. Функция на всех серверах одинаково работает, начальные условия разные судя по всему...

          Ответить4 месяца назад #
  • Андрей

    Подскажите, как в миниатюру записи прописать data-toggle и data-target? Заранее благодарен.

    Ответить3 месяца назад #
  • Андрей

    Можно ли в вордпресс каждой миниатюре задать свой id?

    Ответить3 месяца назад #

Здравствуйте, !

Ваш комментарий
Предпросмотр