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

has_post_thumbnail() WP 2.9.0

Проверяет имеет ли указанная запись (пост) картинку миниатюру. Условный тег.

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

Работает на основе: get_post_thumbnail_id()
✈ 1 раз = 0.000032с = очень быстро | 50000 раз = 0.47с = очень быстро | PHP 7.0.5, WP 4.5.2
Хуки из функции
Возвращает

true/false. true - если у поста есть миниатюра. false - если миниатюры нет.

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

<?php has_post_thumbnail( $post_id ); ?>
$post_id(число/WP_Post)
ID или объект поста, наличие миниатюры для которого нужно проверить.
По умолчанию: ID текущего поста в цикле.

Примеры

#1. Этот пример проверяет есть ли у поста прикрепленная к нему картинка миниатюра.

Если картинки не существует, то выведем картинку по умолчанию (определим её сами: загрузим файл в папку images нашей темы).

<?php 
//должно находится внутри цикла
if( has_post_thumbnail() ) {
	the_post_thumbnail();
}
else {
	echo '<img src="'.get_bloginfo("template_url").'/images/img-default.png" />';
}
?>

Список изменений

С версии 2.9.0 Введена.
С версии 4.4.0 $post can be a post ID or WP_Post object.

Код has post thumbnail: wp-includes/post-thumbnail-template.php WP 5.2.4

<?php
function has_post_thumbnail( $post = null ) {
	$thumbnail_id  = get_post_thumbnail_id( $post );
	$has_thumbnail = (bool) $thumbnail_id;

	/**
	 * Filters whether a post has a post thumbnail.
	 *
	 * @since 5.1.0
	 *
	 * @param bool             $has_thumbnail true if the post has a post thumbnail, otherwise false.
	 * @param int|WP_Post|null $post          Post ID or WP_Post object. Default is global `$post`.
	 * @param int|string       $thumbnail_id  Post thumbnail ID or empty string.
	 */
	return (bool) apply_filters( 'has_post_thumbnail', $has_thumbnail, $post, $thumbnail_id );
}

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

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

Еще из метки: Условные теги (все)

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

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

7 комментов
  • @ Яков

    А как проверить существует ли сама картинка? Если её, скажем, удалили, как это определить и выставить действие по условию отсутствия миниатюры?

    Ответить3.2 года назад #
    • Kama7629

      Как понять, её удалили? Физически, битая ссылка осталась?

      Ответить3.2 года назад #
      • @ Яков

        Да, битая. Я нашел php-скрипт, но он не работает, потому что WordPress названия файлов кириллицей переводит вот так: стоп-контроль-блокпост.jpg. То есть так они отображаются в FileZilla.

        Вот пример этого кода, который не работает, хотя должен работать:

        if (has_post_thumbnail()) {
        	$current_thunmnail = get_post_thumbnail_id();
        	$thumbnail_url     = wp_get_attachment_image_src($current_thunmnail, 'normal-thumbnail', true);
        	if (!file_exists($thumbnail_url[0])) {
        		echo 'Image is not exist';
        		echo $thumbnail_url[0];
        	} else {
        
        		echo get_the_post_thumbnail($id, 'normal-thumbnail', array(
        			'class' => 'img-responsive styleimg',
        			'itemprop' => 'image'
        		));
        	}
        
        } else {
        	echo 'Image is not exist';
        }

        Причем если ввеcти в браузер путь к файлу русскими буквами http://www.../собака.jpg, то бон находит её, как и в коде. А вот с ftp и php никак не дружит.

        Может быть есть какой-то способ проверить битую ссылку средствами WordPress?

        Ответить3.2 года назад #
        • Kama7629

          Где это ты такой скрипт нашел? smile Наличие файла на сервере проверяется через URL... wacko

          Поправил, попробуй:

          if( $cur_thumb_id = get_post_thumbnail_id() ){
          
          	$thumbnail_url = wp_get_attachment_image_src( $cur_thumb_id, 'normal-thumbnail', true );
          
          	$updir = wp_get_upload_dir();
          	$filename = str_replace( $updir['baseurl'], $updir['basedir'], $thumbnail_url[0] );
          
          	if( ! file_exists($filename) ){
          		echo 'Image is not exist: ' . $thumbnail_url[0];
          	}
          	else {
          		echo get_the_post_thumbnail( $id, 'normal-thumbnail', array(
          			'class'    => 'img-responsive styleimg',
          			'itemprop' => 'image'
          		));
          	}
          
          }
          else {
          	echo 'Image is not exist';
          }
          1
          Ответить3.2 года назад #
  • Антон

    Доброй ночи есть вот такая штука:

    if( has_post_thumbnail() ) {
    			$thumbnail = wp_get_attachment_image_src( get_post_thumbnail_id( null ) );
    			if( ! empty( $thumbnail ) ) {
    				$post_meta .= '<meta itemprop="image" content="' . $thumbnail[0] . '" />';
    

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

    Ответить3.1 года назад #
  • @ Роман www.facebook.com/HetmanNovel

    Здравствуйте! Подскажите пожалуйста, в чем может быть причина, в некоторых статьях не работает has_post_thumbnail() не отображается картинка не блок?

    Не работает как внутри цикла, так и вне его. scratch_one-s_head

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