Отображать миниатюру, только если запрошенный размер существует

10

Когда я использую функции, которые получают и выводят миниатюру записи, они будут отображать запрашиваемую миниатюру в указанном вами размере, но если этот размер не существует, они отобразят миниатюру в исходном размере и заставят браузер изменить ее размер.

Как я могу заставить их отображать заполнитель типа «нет изображения», если запрошенный размер не существует?

Alex
источник
1
Вы говорите о зарегистрированных размерах миниатюр или пытаетесь получить произвольный незарегистрированный размер в пикселях? Пример кода, пожалуйста?
Rarst
о зарегистрированных размерах
Alex

Ответы:

2

Предполагая, что вопрос о wp_get_attachment_image_src.
Это может быть также wp_get_attachment_link, но, хотя и связано, этот анализ не включает его.


Узнав об этой проблеме, отвечая на этот вопрос: Как я могу просмотреть все сгенерированные WP эскизы в Media Manager? ,
Обратитесь к нему, чтобы увидеть рабочий код, касающийся проблемы по этому Вопросу .

И это привело к этой теме форума WordPress .


Функция wp_get_attachment_image_src ($ attachment_id, $ size, $ icon) возвращает массив, содержащий:

[0] => url  
[1] => width  
[2] => height  
[3] => is intermediate

Если [3]false, originalданные изображения возвращаются.


Оба wp_get_attachment_image_src и wp_get_attachment_linkполагаются на функцию image_downsize, внутри /wp-includes/media.php.
И вот где этот массив из 4 предметов возвращается.

brasofilo
источник
1

Я не уверен в этом, но я знаю, что вы можете использовать функцию php getimagesize () примерно так:

//This must be in one loop

if(has_post_thumbnail()) {
    $wanted_width = 300;
    $wanted_height = 150;
    $id = get_post_thumbnail_id()
    $image = wp_get_attachment_image_src($id);
    if ($image){
        list($width, $height) = getimagesize($image[0]);
        if (($wanted_height = $width) && ($wanted_height = $height)){
            the_post_thumbnail();
        }
        else{
            //default when no image
            echo '<img src="'.get_bloginfo("template_url").'/images/img-default.png" />';
        }
    }
    else{
        //default when no image
        echo '<img src="'.get_bloginfo("template_url").'/images/img-default.png" />';
    }
} else {
    //default when no image
    echo '<img src="'.get_bloginfo("template_url").'/images/img-default.png" />';
}

и я знаю, что это не ответ на вопрос напрямую, но вы можете использовать плагин под названием AJAX Thumbnail Rebuild - этот плагин позволяет вам перестраивать миниатюры постов. Полезно, если вы добавили add_image_size () после того, как уже загрузили миниатюры сообщений.

Bainternet
источник
1

Вот как я смог отобразить миниатюру, только если существует запрошенный размер:

if ( has_post_thumbnail() )  {
    $imgdata = wp_get_attachment_image_src( get_post_thumbnail_id(), 'thumbnail' ); //change thumbnail to whatever size you are using
    $imgwidth = $imgdata[1]; // thumbnail's width                   
    $wanted_width = 300; //change this to your liking
    if ( ($imgwidth < $wanted_width ) ) {
        the_post_thumbnail();
    } else { 
        //do whatever you want
    }
}

Чтобы узнать больше о wp_get_attachment_image_srcпрочтении Кодекса.

trewknowledge
источник
0

Есть плагин, который на самом деле автоматически создаст размер изображения, если он не существует. http://austinmatzko.com/wordpress-plugins/filosofo-custom-image-sizes/

Мне пока не нужно было использовать этот плагин. Но оно того стоит. Говорят о добавлении подобной функциональности к ядру WP, возможно, в 3.2 http://core.trac.wordpress.org/ticket/15311

Томпсон
источник
0

Кажется, это лучший способ. Используйте глобальную переменную $ _wp_additional_image_sizes, она хранит все зарегистрированные image_size. Поэтому, если вы хотите проверить, определено ли имя размера изображения:

  global $_wp_additional_image_sizes;
  if ( array_key_exists( 'desired-image-size' , $_wp_additional_image_sizes) )
  {
    //your code here
  }
  else
  {
    //default code here 
  }
Mathias
источник
0

Наилучший подход - использовать встроенную в Wordpress функцию «get_intermediate_image_sizes» для возврата полного списка размеров изображений в виде массива, а затем просмотреть его.

show_image_by_size( 10470, 'custom_size' );

function show_image_by_size( $_post_id, $_desired_size ) {
  $_sizes = get_intermediate_image_sizes();
  $_thumbnail_id = get_post_thumbnail_id( $_post_id );
  $_image_size = ( in_array( $_desired_size , $_sizes ) ) ? $_desired_size : 'full';
  $image = wp_get_attachment_image_src( $_thumbnail_id, $_image_size );
  echo '<img src="' . esc_url( $image[0] ) . '" />';
}
Чарльз Хаймет
источник
-1

Может быть, это поможет

<?php 
//This must be in a loop
if(has_post_thumbnail()) {
    the_post_thumbnail();
} else {
    echo '<img src="'.get_bloginfo("template_url").'/images/img-default.png" />';
}
?>

from: http://codex.wordpress.org/Function_Reference/has_post_thumbnail
Я использую что-то вроде этого, чтобы проверить, существует ли размер изображения:

if (function_exists('has_post_thumbnail') && has_post_thumbnail('medium')) {
//// code to display thumbnail goes here
}
else {
/// otherwise do this
}

Надеюсь, это поможет вам.

Томпсон
источник