Cómo extraer la primera imagen “attachment” de un post

WordPress

Recapitulemos lo que hemos visto en las últimas entradas, aquí en Blogpocket.com, acerca del tratamiento de las imágenes adjuntas a un post (los objetos denominados attachments que, en realidad, pueden ser también vídeos, etc.).

  • Si subes una imagen, mediante el botón “Media” del editor de posts o mediante la opción “Media” del escritorio), se almacena en el directorio local (que suele ser wp-content/uploads). Las imágenes asociadas (WordPress crea varias versiones, en distintos tamaños -thumbnail, medium y full- del archivo subido) se denominan “Attachments” del posts.
  • Con el plugin W3 Total Cache puedes hacer que dichas imágenes, automáticamente, se transmitan a un CDN. En Configurando W3 Total Cache para el CDN de Amazon vimos cómo hacerlo
  • Además, para cada post puedes elegir una imagen como destacada (featured). Puede ser cualquiera de las existentes en la galería y no tiene porqué coincidir con las attachments. Puedes asignar una imagen featured automáticamente, y de una pasada, a partir de una de las imágenes attachment de cada post, en toda la base de datos de tu blog, con el plugin Auto Featured Image. Sin embargo, llegado el caso, puede ser necesario eliminar todas las imágenes featured, cuestión que explicábamos en Cómo eliminar la imagen en miniatura de todos los posts.
  • Otro problema puede darse en algunos themes que utilizan funciones (como vt_resize) para redimensionar la imagen featured y utilizando un CDN. El problema y la solución los describiamos en Cómo redimensionar la imagen featured si utilizas CDN.
  • Si a partir de un determinado momento empiezas a utilizar un CDN y las imágenes de tus posts están enlazadas a Flickr, puedes traértelas al directorio local (y, en consecuencia, al CDN con W3 Total Cache) con el plugin Add Linked Images To Gallery.

Hoy añadiremos a todo esto la forma de conseguir extraer de un post la primera imagen attachment. ¿Y para qué puede servir eso?. Puede ser muy útil para mostrar siempre una imagen asociada al post, como destacada, aunque no tenga asignada una featured. Y también en el caso de instalaciones multisite con varios editores, en las que puede ser interesante no obligar a éstos a subir fotos al directorio local ni a asignar imágenes featured, pudiendo seguir enlazando a URLs externas. El plugin Add Linked Images To Gallery y el código que veremos a continuación harán el trabajo por ellos.

Extrayendo la primera imagen de un post

La función de WordPress get_posts sirve para crear múltiples bucles y recupera una lista de los últimos posts bajo unos determinados criterios. Para utilizarla con el objetivo de extraer las imágenes adjuntas a un post, solo es necesario saber que las imágenes attachments se guardan en la base de datos con el indicativo “attachment” en el campo post_type y, además, con el valor ‘inherit’ en el campo post_estatus. Otros dos argumentos para esta función son el número de posts que se recuperarán (numberposts a -1 significa todos los posts) y post_parent que es el número ID del post.

Con ello se obtiene una lista de todos los posts que se puede recorrer para seleccionar lo que se quiera. En nuestro caso, con la función wp_get_attachment_image_src accederemos al array que contiene la URL y los valores del ancho y alto del archivo attachment.

<?php
$args = array( ‘post_type’ => ‘attachment’, ‘numberposts’ => 1, ‘post_status’ =>’inherit’, ‘post_parent’ => $post->ID );
$attachments = get_posts($args);
if ($attachments) {
foreach ( $attachments as $attachment ) {

$image = wp_get_attachment_image_src($attachment->ID, ‘full’);
}
}
?>

Una vez obtenido el array con los atributos de la imagen attachment, podemos mostrar ésta redimensionada, de la siguiente forma:

<?php if ( $attachments ) { ?>
<img src=”<php echo $image[0]; ?>” width=”280″ height=”257″ alt=”image”/>
<?php }
?>

Ver también la función get_children con la que también se puede generar un bucle para mostrar la primera imagen de un post.

Comentarios Google+