wp_get_attachment_image_src() no devuelve lo que espero

30 jul 2013, 17:33:43
Vistas: 17.5K
Votos: 0

Tengo este molesto problema que no puedo resolver:

if( $meta1 = '' && $meta2 = '' ) { 
$image_attributes = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), my_own_size_function());
echo  $image_attributes[0];
} elseif(  $meta1 != '' ) { 
    echo $meta1; 
} elseif ( $meta2  != '' ){
    $image_attributes = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), my_own_size_function() );
    echo $image_attributes[0];
} else {
    echo "ko";
}

Cuando hago print_r de my_own_size_function() obtengo un array como este:

Array
(
     [0] => 600
     [1] => 400
)

Pero cuando hago print_r de $image_attributes obtengo otro resultado:

Array
(
    [0] => http://localhost/wordpress/wp-content/uploads/2013/07/my_image.jpg
    [1] => 200
    [2] => 150
    [3] => 
)

¿Alguna idea de cuál puede ser la razón de esto? Gracias de antemano.

0
Todas las respuestas a la pregunta 2
2

Cambia la función my_own_size_function() por array(600, 400)

$image_attributes = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), array(600, 400));
30 jul 2013 17:47:22
Comentarios

Gracias amigo, pero esto sería array(600,400) en su lugar. De todos modos ya lo intenté, revisé la función en el codex y mencionan que $size puede ser un array, mi función ya retorna array(600,400);

JMau JMau
30 jul 2013 17:51:02

¿Y tienes la imagen subida en ese tamaño?

Pontus Abrahamsson Pontus Abrahamsson
30 jul 2013 17:55:45
2

Lo siguiente está basado completamente en experimentos realizados durante los últimos 15 minutos aproximadamente, por lo que no lo llamaría canónico pero...

wp_get_attachment_image_src() utiliza la función image_downsize(), que intentará encontrar y devolver la imagen más cercana en tamaño a los valores de tamaño proporcionados. Si experimentas con tamaños de imagen conocidos (mira las imágenes reales guardadas en wp-content/uploads) entenderás lo que quiero decir. A pesar del nombre, a veces devolverá imágenes más grandes, pero los componentes de altura y ancho del array deberían establecerse a los valores proporcionados, o a algún intento de aproximación escalada (así parece) si esos valores son muy inexactos. No puedo decir si ese "escalado" es lo que está sucediendo en tu caso, pero podría ser y parece probable.

Permíteme dar un ejemplo. Tengo una imagen que se guardó como 150x150, 293x300 y tamaño completo. Esto...

var_dump(wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), array(20, 20)));

... devuelve un array con la imagen de 150x150 y los tamaños que proporcioné: 20x20. Sin embargo, esto...

var_dump(wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), array(200, 250)));

... devuelve la URL de la imagen de 150x150 pero con tamaños de 200x204. Eso no es lo que proporcioné. Los valores de tamaño han sido alterados por algún algoritmo. Tras una investigación más profunda, parece que image_constrain_size_for_editor es el candidato más probable.

También puedes verificar si algo ha aplicado una función al filtro image_downsize, ya que eso secuestrará completamente la función.

30 jul 2013 18:23:47
Comentarios

Gracias por tu respuesta. Buena lectura de todos modos, pero el problema es que el tamaño ni siquiera cambia. He incluido un selector de tamaño para la imagen destacada. No parece venir de my_own_size_function() simplemente porque obtengo lo que quiero cuando hago print_r

JMau JMau
30 jul 2013 18:37:03

¡Supongo que soy el eslabón más débil! Revisé las subidas y estaba tratando con la única imagen que no tiene el tamaño apropiado.

JMau JMau
30 jul 2013 18:43:13