Exibir miniatura apenas se o tamanho solicitado existir

10

Quando eu uso as funções que obtêm e produzem a miniatura da postagem, elas exibirão a miniatura solicitada no tamanho especificado, mas se esse tamanho não existir, elas exibirão a miniatura no tamanho original e forçarão o navegador a redimensioná-lo.

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

Alex
fonte
11
Você está falando sobre tamanhos de miniaturas registradas ou está tentando obter um tamanho arbitrário não registrado em pixels? Exemplo de código, por favor?
Rarst 27/01
sobre os tamanhos registrados
Alex

Respostas:

2

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


Fiquei ciente desse problema ao responder a essa pergunta: Como posso ver todas as miniaturas geradas pelo WP no Media Manager? .
Consulte-o para ver um código de trabalho referente ao problema desta questão .

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


A função wp_get_attachment_image_src ($ attachment_id, $ size, $ icon) retorna uma matriz que contém:

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

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


Ambos wp_get_attachment_image_src e wp_get_attachment_linkdependem da função image_downsize, por dentro /wp-includes/media.php.
E é aí que esse array de 4 itens está sendo retornado.

brasofilo
fonte
1

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

//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 sei que não é uma resposta direta à pergunta, mas você pode usar um plug-in chamado AJAX Thumbnail Rebuild - Esse plug-in permite recriar as miniaturas das postagens. Útil se você adicionar_image_size () depois de já ter carregado miniaturas de postagem.

Bainternet
fonte
1

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

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 a wp_get_attachment_image_srcleitura do Codex.

conhecimento
fonte
0

Parece que é uma maneira melhor. Use a variável global $ _wp_additional_image_sizes, ela armazena todo o image_size registrado. Portanto, se você deseja verificar se um nome de tamanho de imagem está definido:

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

A melhor abordagem é usar a função incorporada "get_intermediate_image_sizes" do Wordpress para retornar a lista completa de tamanhos de imagem como uma matriz e, então, 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] ) . '" />';
}
Charles Jaimet
fonte
-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" />';
}
?>

from: http://codex.wordpress.org/Function_Reference/has_post_thumbnail
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 continuar.

Thompson
fonte