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?


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.


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.


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.



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 
  }

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

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.