Відображати мініатюру, лише якщо потрібний розмір


10

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

Як я можу змусити їх відображати заповнювач на зразок "немає зображення", якщо потрібний розмір не існує?


1
Ви говорите про зареєстровані розміри мініатюр або ви намагаєтеся отримати довільний нереєстрований розмір у пікселях? Приклад коду, будь ласка?
Рарст

про зареєстровані розміри
Алекс

Відповіді:


2

Припустимо, що про це йдеться wp_get_attachment_image_src.
Можливо, це також стосується wp_get_attachment_link, але, хоч і пов'язане, цей аналіз не включає його.


Знаєте про цю проблему, відповідаючи на це запитання: Як я можу переглянути всі створені WP ескізи в Менеджері медіа? .
Зверніться до нього, щоб побачити робочий код щодо проблеми з цього питання .

І це призводить до цієї теми форуму WordPress .


Функція wp_get_attachment_image_src ($ attachment_id, $ size, $ icon) повертає масив, що містить:

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

Якщо [3]помилково, originalдані зображення повертаються.


Обидва wp_get_attachment_image_src і wp_get_attachment_linkпокладаються на функцію image_downsize, всередині /wp-includes/media.php.
І ось тут повертається цей масив 4 елементів.


1

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

//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 - Цей плагін дозволяє вам знову створити ескізи повідомлення. Корисно, якщо ви вже додали мініатюри допису, якщо ви додаєте_image_size ().


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читання Кодексу.


0

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

Мені ще не потрібно було користуватися цим плагіном. Але це варто зняти. Існує розмова про додавання подібних функціональних можливостей до ядра WP, можливо, в 3.2 http://core.trac.wordpress.org/ticket/15311


0

Здається, це кращий спосіб. Використовуйте глобальну змінну $ _wp_additional_image_size, вона зберігає всі зареєстровані 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 
  }

0

Найкращим підходом є використання вбудованої функції Wordpress "get_intermediate_image_size" для повернення повного списку розмірів зображення у вигляді масиву, а потім перегляньте це.

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

з: 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
}

Сподіваюся, це допоможе вам рухатися.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.