Exibe a miniatura apenas se o tamanho solicitado existir

10

Quando uso as funções que obtêm e enviam a miniatura da postagem, elas exibirão a miniatura solicitada no tamanho que você especificar, mas se esse tamanho não existir, elas exibirão a miniatura no tamanho original e forçarão o navegador a redimensione.

Como posso forçá-los a exibir um marcador de espaço como "sem imagem", caso o tamanho solicitado não exista?

    
por Alex 27.01.2011 / 05:38

7 respostas

2

Assumindo , a questão é sobre wp_get_attachment_image_src .
Pode ser também sobre wp_get_attachment_link , mas, embora relacionada, essa análise não a inclui.

Consciente desta questão a responder a esta pergunta: Como posso ver todas as miniaturas geradas pelo WP em Gerenciador de mídia? .
Consulte para ver um código de trabalho relacionado ao problema nesta questão .

E isso leva a este tópico do fórum WordPress .

A função wp_get_attachment_image_src ($ attachment_id, $ size, $ icon) retorna uma matriz contendo:

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

Se [3] for falso, os dados da imagem original serão retornados.

Tanto wp_get_attachment_image_src e wp_get_attachment_link confiam na função image_downsize , dentro de /wp-includes/media.php .
E é aí que esta matriz de 4 itens está sendo retornada.

    
por brasofilo 04.07.2012 / 04:11
1

Não tenho certeza sobre isso, mas sei que você pode usar a função getimagesize () do php algo assim:

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

e eu sei que não é uma resposta à pergunta diretamente, mas você pode usar um plugin chamado AJAX Thumbnail Rebuild - Este plugin permite que você reconstrua as miniaturas das postagens. Útil se você adicionar_image_size () depois de já ter carregado as miniaturas das postagens.

    
por Bainternet 27.01.2011 / 09:53
1

Foi assim que consegui exibir uma miniatura apenas se um tamanho solicitado existir:

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

Para saber mais sobre wp_get_attachment_image_src , leia o Codex.

    
por trewknowledge 28.12.2011 / 19:57
0

Existe um plugin que irá criar o tamanho da imagem automaticamente para você, se não existir. enlace

Eu ainda não precisei usar este plugin. Mas vale a pena um tiro. Fala-se sobre adicionar funcionalidade semelhante ao núcleo do WP, talvez em 3.2 enlace

    
por Thompson 27.01.2011 / 21:15
0

Parece ser um jeito melhor. Use a variável global $ _wp_additional_image_sizes, armazene todos os image_size registrados. Então, se você quiser verificar se um nome de tamanho de imagem é definido:

  global $_wp_additional_image_sizes;
  if ( array_key_exists( 'desired-image-size' , $_wp_additional_image_sizes) )
  {
    //your code here
  }
  else
  {
    //default code here 
  }
    
por Mathias 24.09.2013 / 11:43
0

A melhor abordagem é usar a função "get_intermediate_image_sizes" incorporada no Wordpress para retornar a lista completa de tamanhos de imagens como um array e depois examinar isso.

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] ) . '" />';
}
    
por Charles Jaimet 22.11.2016 / 15:25
-1

Talvez isso ajude

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

de: enlace
Eu uso algo assim para verificar se o tamanho da imagem existe:

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

Espero que ajude você a seguir em frente.

    
por Thompson 05.02.2011 / 23:33