Mostrar miniatura solo si existe el tamaño solicitado

10

Cuando utilizo las funciones que obtienen y imprimen la miniatura de 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 forzarán al navegador a cambiar el 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?

    
pregunta Alex 27.01.2011 - 05:38

7 respuestas

2

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

Se dio cuenta de este problema respondiendo a esta pregunta: ¿Cómo puedo ver todas las miniaturas generadas por WP en ¿Administrador de medios? .
Consúltelo para ver un código de trabajo relacionado con el problema sobre esta pregunta .

Y lleva a este tema del foro de WordPress .

La función wp_get_attachment_image_src ($ attachment_id, $ tamaño, $ icon) devuelve una matriz que contiene:

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

Si [3] es falso, se devuelven los datos de imagen original .

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

    
respondido por el brasofilo 04.07.2012 - 04:11
1

No estoy seguro de esto, pero sé que puedes usar la función getimagesize () de php algo como esto:

//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 puedes usar un complemento llamado Reconstrucción de miniaturas de AJAX - Este complemento te permite reconstruir las miniaturas de la publicación. Útil si agregas_imagen_ tamaño () después de haber subido las miniaturas de las publicaciones.

    
respondido por el Bainternet 27.01.2011 - 09:53
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_src lea el Codex.

    
respondido por el trewknowledge 28.12.2011 - 19:57
0

Hay un complemento que realmente creará el tamaño de la imagen automáticamente si no existe. enlace

No he necesitado usar este complemento todavía. Pero vale la pena un tiro. Se habla de agregar una funcionalidad similar al núcleo WP, tal vez en 3.2 enlace

    
respondido por el Thompson 27.01.2011 - 21:15
0

Parece que es una mejor manera. Use la variable global $ _wp_additional_image_sizes, almacena todos los tamaños de imagen registrados. Por lo tanto, si desea comprobar 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 
  }
    
respondido por el Mathias 24.09.2013 - 11:43
0

El mejor enfoque es utilizar la función "get_intermediate_image_sizes" incorporada de Wordpress para devolver la lista completa de tamaños de imagen como una matriz y luego mirar a través de 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] ) . '" />';
}
    
respondido por el Charles Jaimet 22.11.2016 - 15:25
-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: enlace
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 ponerte en marcha.

    
respondido por el Thompson 05.02.2011 - 23:33

Lea otras preguntas en las etiquetas