wp_get_attachment_image_src() no devuelve lo que espero
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.

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);

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.

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
