Una gran funcionalidad que tiene WordPress desde las primeras versiones es que los archivos que se suben desde la edición de una entrada o página quedan asociados como “adjuntos” a ese post. En la base de datos quedan guardados, sean el tipo de archivo que sean, como tipo de contenido attachment.
En esta entrada vamos a echar un vistazo a cinco ejemplos básicos pero muy útiles para trabajar con las imágenes adjuntas a un post, con varias formas para conocer la flexibilidad de WordPress para cubrir esta necesidad.

La idea principal para realizar consultas de los archivos adjuntos a un post es que todos los adjuntos tienen guardado como post_parent el ID del post en cuestión. Este identificador, si estamos dentro del bucle de WordPress lo tendremos preparado en la variable $post->ID.
Consultar y mostrar todas las imágenes adjuntas a un post
Sabiendo que los adjuntos son hijos del post, podemos usar este código para generar un bucle en el que se consulten todos los archivos adjuntos a un post que sean imágenes. Utilizamos la función get_posts() para realizar la consulta con esas opciones y después, para cada uno de los resultados, obtenemos los datos de la imagen mediante la función wp_get_attachment_image_src(), que nos da la URL del propio archivo de imagen, su altura y su anchura. Así podemos crear nuestra propia etiqueta HTML para mostrar la imagen como queramos.
Esta función permite también especificar el tamaño de la imagen de la que queremos obtener la información. Puede ser “full”, “large”, “medium” o “thumbnail” y son los tamaños que pueden modificarse desde el propio panel de administración en la sección de Ajustes -> Multimedia.
<?php
$args = array(
'post_type' => 'attachment',
'numberposts' => null,
'post_parent' => $post->ID,
'post_mime_type' => 'image',
);
$attachments = get_posts($args);
if ($attachments) {
foreach ($attachments as $attachment) {
//Tamaños: "thumbnail", "medium", "large", "full"
$image_atts = wp_get_attachment_image_src( $attachment->ID, 'medium' ); ?>
<img src="<?php echo $image_atts[0]; ?>" alt="" width="<?php echo $image_atts[1]; ?>" height="<?php echo $image_atts[2]; ?>" />
<?php
}
}
?>
Consultar y mostrar sólo la última imagen adjuntada
En el segundo ejemplo cambiamos de función para generar la consulta y usaremos get_children(), que directamente consulta los hijos de un determinado post. Además, la vamos a mostrar en tamaño mediano e incluímos un enlace a la imagen en tamaño completo capturando la URL del archivo mediante la función wp_get_attachment_url().
<?php
$args = array(
'post_type' => 'attachment',
'numberposts' => 1,
'order' => 'ASC',
'post_parent' => $post->ID,
'post_mime_type' => 'image'
);
$attachments = get_children($args);
if ($attachments) {
foreach ($attachments as $attachment) {
//Tamaños: "thumbnail", "medium", "large", "full"
$image_atts = wp_get_attachment_image_src( $attachment->ID, 'large' );
$attachment_full_url = wp_get_attachment_url($attachment->ID); ?>
<a href="<?php echo $attachment_full_url; ?>">
<img src="<?php echo $image_atts[0]; ?>" alt="" width="<?php echo $image_atts[1]; ?>" height="<?php echo $image_atts[2]; ?>" />
</a>
<?php
}
}
?>
Mostrar sólo las imágenes subidas en un formato determinado
A la función get_posts() también se le puede pasar como argumento una lista de MIME types concretos para que sólo obtenga las imágenes de un tipo determinado.
El bloque de código es muy parecido, pero en esta ocasión añadimos una nueva opción a la variable $args. En el ejemplo, consultamos todos los archivos adjuntos que sean imágenes de tipo JPG o PNG y las mostramos en tamaño miniatura. Para obtener la URL de la miniatura, en vez de usar la función anterior utilizaremos wp_get_attachment_thumb_url(), que nos devuelve directamente la dirección del thumbnail.
$args = array(
'post_type' => 'attachment',
'numberposts' => null,
'post_parent' => $post->ID,
'post_mime_type' => array('image/jpeg', 'image/png')
);
$attachments = get_posts($args);
if ($attachments) {
foreach ($attachments as $attachment) {
<img src="<?php wp_get_attachment_thumb_url($attachment->ID); ?>" alt="" />
<?php
}
}
?>
Mostrar sólo la imagen establecida como destacada
Para mostrar sólo la imagen destacada de la entrada o página podríamos hacer un bucle, como en el ejemplo anterior. Pero también podemos utilizar la función get_post_thumbnail_id(), que nos devuelve el ID de la imagen destacada, por lo que ya no necesitamos crear un bucle y podemos usar la función wp_get_attachment_image_src() para consultar y traer el adjunto que especifiquemos mediante su identificador.
Primero averiguamos el ID de la imagen adjunta, después obtenemos la URL de dicha imagen en el tamaño que queramos, su altura y su anchura. Y construímos la etiqueta HTML para mostrar la imagen.
<?php
$featured_id = get_post_thumbnail_id($post->ID);
$featured_size = 'large';
$featured_image = wp_get_attachment_image_src( $featured_id, $featured_size);
if($featured_image){ ?>
<img src="<?php echo $featured_image[0]; ?>" alt="" width="<?php echo $featured_image[1]; ?>" height="<?php echo $featured_image[2]; ?>" />
<?php } ?>
Mostrar todas las imágenes excepto la establecida como destacada
En muchas ocasiones queremos mostrar una galería con todas las imágenes que se han adjuntado a una entrada o página, pero la imagen destacada la tenemos reservada para mostrarla en otros espacios y no queremos que aparezca en esta galería.
En ese caso, podemos añadir a la variable $args la opción exclude para excluir de la consulta los adjuntos que tengan ese ID. Sólo necesitamos conocer el ID de la imagen que está establecida como destacada, pero como acabamos de ver en el ejemplo anterior esta información nos la dice la función get_post_thumbnail_id(), a la que solamente tenemos que especificarle el ID del post y nos devuelve el ID de su imagen destacada.
<?php
$args = array(
'post_type' => 'attachment',
'numberposts' => null,
'post_parent' => $post->ID,
'post_mime_type' => 'image',
'exclude' => get_post_thumbnail_id($post->ID)
);
$attachments = get_posts($args);
if ($attachments) {
foreach ($attachments as $attachment) {
//Tamaños: "thumbnail", "medium", "large", "full"
$image_atts = wp_get_attachment_image_src( $attachment->ID, 'medium' ); ?>
<img src="<?php echo $image_atts[0]; ?>" alt="" width="<?php echo $image_atts[1]; ?>" height="<?php echo $image_atts[2]; ?>" />
<?php
}
}
?>
Como ves, WordPress nos permite trabajar con las imágenes adjuntas de una forma muy flexible. A partir de aquí, ya sólo queda la imaginación de cada uno, :)
Más información: