Wyświetlaj miniaturę tylko wtedy, gdy istnieje żądany rozmiar

10

Kiedy korzystam z funkcji, które pobierają i wysyłają miniaturę postu, wyświetlą żądaną miniaturę w określonym przez ciebie rozmiarze, ale jeśli ten rozmiar nie istnieje, wyświetlą miniaturę w oryginalnym rozmiarze i zmuszą przeglądarkę do zmiany jej rozmiaru.

Jak zmusić je do wyświetlenia symbolu zastępczego, takiego jak „brak obrazu”, jeśli żądany rozmiar nie istnieje?

Alex
źródło
1
Czy mówisz o zarejestrowanych rozmiarach miniatur lub próbujesz uzyskać dowolny niezarejestrowany rozmiar w pikselach? Przykład kodu proszę?
Rarst 27.01.11
o zarejestrowanych rozmiarach
Alex

Odpowiedzi:

2

Zakładając, że chodzi o pytanie wp_get_attachment_image_src.
Może to również dotyczyć wp_get_attachment_link, ale chociaż ta analiza jest powiązana, ta analiza jej nie obejmuje.


Dowiedziałem się o tym problemie, odpowiadając na to pytanie: Jak wyświetlić wszystkie miniatury wygenerowane przez WP w Media Manager? .
Zapoznaj się z nim, aby zobaczyć działający kod dotyczący problemu dotyczącego tego pytania .

I to prowadzi do tego tematu na forum WordPress .


Funkcja wp_get_attachment_image_src ($ id_ załącznika, $ rozmiar, $ ikona) zwraca tablicę zawierającą:

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

Jeśli [3]ma wartość false, originalzwracane są dane obrazu.


Zarówno wp_get_attachment_image_src i wp_get_attachment_linkpolegają na funkcji image_downsizewewnątrz /wp-includes/media.php.
I właśnie tam zwracana jest ta tablica 4 przedmiotów.

brasofilo
źródło
1

Nie jestem tego pewien, ale wiem, że możesz użyć funkcji getimagesize () w php mniej więcej tak:

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

i wiem, że nie jest to bezpośrednia odpowiedź na pytanie, ale możesz użyć wtyczki o nazwie AJAX Thumbnail Rebuild - Ta wtyczka pozwala na odbudowanie miniatur postów. Przydatne, jeśli dodasz_image_size () po przesłaniu miniatur postów.

Bainternet
źródło
1

W ten sposób mogłem wyświetlić miniaturę tylko wtedy, gdy istnieje żądany rozmiar:

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

Aby dowiedzieć się więcej o wp_get_attachment_image_srcczytaniu Kodeksu.

znajomość
źródło
0

To wydaje się być lepszy sposób. Użyj globalnej zmiennej $ _wp_additional_image_sizes, przechowujesz wszystkie zarejestrowane image_size. Więc jeśli chcesz sprawdzić, czy nazwa rozmiaru obrazu jest zdefiniowana:

  global $_wp_additional_image_sizes;
  if ( array_key_exists( 'desired-image-size' , $_wp_additional_image_sizes) )
  {
    //your code here
  }
  else
  {
    //default code here 
  }
Mathias
źródło
0

Najlepszym rozwiązaniem jest użycie wbudowanej funkcji Wordpress „get_intermediate_image_sizes”, aby zwrócić pełną listę rozmiarów obrazów jako tablicę, a następnie przejrzeć to.

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] ) . '" />';
}
Charles Jaimet
źródło
-1

Może to pomoże

<?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
Używam czegoś takiego, aby sprawdzić, czy rozmiar obrazu istnieje:

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

Mam nadzieję, że pomoże Ci to rozpocząć.

Thompson
źródło