Mostrar miniatura solo si existe el tamaño solicitado

10

Cuando uso las funciones que obtienen y generan la miniatura de la publicación, mostrarán la miniatura solicitada en el tamaño que especifique, pero si este tamaño no existe, mostrarán la miniatura en el tamaño original y obligarán al navegador a cambiar su tamaño.

¿Cómo puedo obligarlos a mostrar un marcador de posición como "sin imagen" en caso de que el tamaño solicitado no exista?

Alex
fuente
1
¿Está hablando de tamaños de miniatura registrados o está tratando de obtener un tamaño arbitrario no registrado en píxeles? Ejemplo de código por favor?
Rarst
sobre los tamaños registrados
Alex

Respuestas:

2

Asumir que la pregunta es sobre wp_get_attachment_image_src.
También podría tratarse wp_get_attachment_link, pero, aunque relacionado, este análisis no lo incluye.


Me di cuenta de este problema al responder esta pregunta: ¿Cómo puedo ver todas las miniaturas generadas por WP en Media Manager? .
Refiérase a él para ver un código de trabajo relacionado con el problema de esta pregunta .

Y lleva a este tema del foro de WordPress .


La función wp_get_attachment_image_src ($ attach_id, $ size, $ icon) devuelve una matriz que contiene:

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

Si [3]es falso, originalse devuelven los datos de la imagen.


Ambos wp_get_attachment_image_src y wp_get_attachment_linkconfían en la función image_downsize, dentro /wp-includes/media.php.
Y ahí es donde se devuelve esta matriz de 4 elementos.

brasofilo
fuente
1

No estoy seguro de esto, pero sé que puede usar la función getimagesize () de php de esta manera:

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

y sé que no es una respuesta a la pregunta directamente, pero puede usar un complemento llamado Reconstrucción de miniaturas AJAX : este complemento le permite reconstruir las miniaturas de las publicaciones. Útil si agrega add_image_size () después de haber subido las miniaturas de las publicaciones.

Bainternet
fuente
1

Así es como pude mostrar una miniatura solo si existe un tamaño 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 obtener más información sobre wp_get_attachment_image_srcleer el Codex.

conocimiento
fuente
0

Parece que es una mejor manera. Use la variable global $ _wp_additional_image_sizes, almacena todos los tamaños de imagen registrados. Entonces, si desea verificar si se define un nombre de tamaño de imagen:

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

El mejor enfoque es utilizar la función incorporada "get_intermediate_image_sizes" de Wordpress para devolver la lista completa de tamaños de imagen como una matriz y luego revisar eso.

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
fuente
-1

Tal vez esto ayude

<?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: http://codex.wordpress.org/Function_Reference/has_post_thumbnail
Uso algo como esto para verificar si el tamaño de la imagen existe:

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

Espero que te ayude a seguir.

Thompson
fuente