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

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" />';
}
?>

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

<?php
function has_post_thumbnail( $post = null ) {
	return (bool) get_post_thumbnail_id( $post );
}

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

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

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

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

has_post_thumbnail 8 комментариев
  • Яков @

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

    Ответить1.2 года назад #
    • Kama4659

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

      Ответить1.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?

        Ответить1.2 года назад #
        • Kama4659

          Где это ты такой скрипт нашел? 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.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] . '" />';
    

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

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

    Ввел

    $post_meta .= '<meta itemprop="image" content="' . get_the_post_thumbnail( $id, 'full' ) . '" />';

    Google ответил

    image <img width= (Атрибут image.itemtype имеет недопустимое значение.)`

  • Алексей @

    Добрый день!
    Есть вот такой код:

    add_action('save_post', 'my_template_thumbnail');
    
    function my_template_thumbnail($post_id)  {
    $post_thumbnail = get_post_meta($post_id, $key = '_thumbnail_id', $single = true);
      if ( !wp_is_post_revision($post_id) ) :
    	if ( empty($post_thumbnail) ) {
    	  update_post_meta($post_id, $meta_key = '_thumbnail_id', $meta_value = '8316');
    	}
      endif;
    }

    А как сделать чтобы миниатюры автоматически не записывались для всех постов с рубрики 34?

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

Ваш комментарий