Una imagen vale más que mil palabras y es bastante cierto, por eso es que en nuestro artículos agregamos imágenes que digan algo a los usuarios, en este tutorial agregaremos de forma automática una imagen destacada por si se nos olvida alguna vez y en su caso configuramos una imagen por defecto.
Con este fragmento de código explicaremos cómo extraer una imagen destacada (feature image) de forma automática en los post de wordpress, dejaré el código necesario y tratare de explicar cada trozo de código y la función que realiza cada linea.
Esta función además de capturar la primera imagen del post si no existe imagen destacada, también puede agregar una imagen por defecto para el caso en que el post no tenga ninguna imagen. Esto es muy útil ya que no todos los post tienen imagen y con esta opción podemos agregarle una por defecto.
Código completo
Código :
function auto_post_thumbnail() { global $post; $already_has_thumb = has_post_thumbnail($post->ID); if (!$already_has_thumb) { $attached_image = get_children( "post_parent=$post->ID&post_type=attachment&post_mime_type=image&numberposts=1" ); if ($attached_image) { foreach ($attached_image as $attachment_id => $attachment) { set_post_thumbnail($post->ID, $attachment_id); } } else { set_post_thumbnail($post->ID, 'ID_imagen_por_defecto'); } } } //Final de la función add_action('the_post', 'auto_post_thumbnail'); add_action('save_post', 'auto_post_thumbnail'); add_action('draft_to_publish', 'auto_post_thumbnail'); add_action('new_to_publish', 'auto_post_thumbnail'); add_action('pending_to_publish', 'auto_post_thumbnail'); add_action('future_to_publish', 'auto_post_thumbnail');
En esta función llamamos la imagen o las imágenes adjuntas si existen, utilizando las distintas funciones que wordpress nos proporciona, a continuación las más importantes.
Verificamos si hay imágenes destacadas
Código :
$already_has_thumb = has_post_thumbnail($post->ID);
- has_post_thumbnail($post->ID);: Con esta función preguntamos al sistema si hay o no imagen destacada y guardamos el resultado en la variable $already_has_thumb
Extraemos la primera imagen del post si no hay destacadas
Código :
if (!$already_has_thumb) { $attached_image = get_children( "post_parent=$post->ID&post_type=attachment&post_mime_type=image&numberposts=1" );
Agregamos una condicional que dice: si no hay imagen adjunta if (!$already_has_thumb), mostramos la primera imagen del post utilizando la función get_children(); en el code de wordpress explica perfectamente esta función y el funcionamiento con ejemplos de cada uno de estos parámetros.
Mostramos la imagen capturada
Código :
if ($attached_image) { foreach ($attached_image as $attachment_id => $attachment) { set_post_thumbnail($post->ID, $attachment_id); } } else { set_post_thumbnail($post->ID, 'ID_imagen_por_defecto'); } }
En esta parte con otro condicional preguntamos si hay algún valor en la variable $attached_image, que es la que contiene el valor de la función get_children() y si es así con un bucle foreach agregamos los datos capturados en la variable $attachment_id, ahora podemos postrar la imagen utilizando la función set_post_thumbnail($post->ID, $attachment_id); con sus dos parámetros, necesarios para saber respectivamente el post de donde vamos a extraer la imagen y el id o nombre de adjunto a mostrar.
Si no tenemos (else) ninguna imagen adjunta mostramos un archivo adjunto por defecto que podemos asignar nosotros mismos, simplemente agregando el ID de dicho archivo en esta parte del código.
Código :
else { set_post_thumbnail($post->ID, 'ID_imagen_por_defecto'); }
Buscar el id del archivo por defecto
Para agregar una imagen predeterminada en los post si no hay imágenes destacadas o imágenes en el post, podemos crear una imagen personalizada subirla desde la Librería multimedia y fijarnos en el ID de esa imagen, lo agregamos en nuestra función y listo.
Agregar la función auto_post_thumbnail() a los hook de wordpress
Esta es la última parte del código y creo que la más importante, la función anterior sin estos ganchos o hook no realiza ninguna acción, esta es la parte del código donde se le dice a la función cuando tiene que trabajar.
En nuestro caso nos interesa que esta función trabaje cuando se publica alguno de los tipos de post que trae wordpress, esto lo haremos utilizando la función add_action(), a esta función les pasamos 2 parámetros:
- El primero: Nombre de la acción o hook que hace que se ejecute nuestra función
- El segundo: Nombre de la función a ejecutar.
Código :
add_action('the_post', 'auto_post_thumbnail'); add_action('save_post', 'auto_post_thumbnail'); add_action('draft_to_publish', 'auto_post_thumbnail'); add_action('new_to_publish', 'auto_post_thumbnail'); add_action('pending_to_publish', 'auto_post_thumbnail'); add_action('future_to_publish', 'auto_post_thumbnail');
Si quiere aprender un poco más sobre las acciones de wordpress aquí tiene un listado completo de estas acciones.
Conclusión
Sólo con pegar esta función y agregar el ID de una imagen por defecto te ahorra trabajo como lo de agregar imágenes a tus post. Es una función muy interesante y útil, y espero la explicación le sea de utilidad y se entienda perfectamente.
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por omegakenshin el 08 de Agosto de 2012
Por jordano_p el 09 de Agosto de 2012
Por 0800jose el 11 de Agosto de 2012
Por Redy el 22 de Agosto de 2012
Por jordano_p el 26 de Agosto de 2012
Redy-blog :
Se me Paso ese detalle, este código se debe agregar en el archivo function.php
Por frank el 07 de Octubre de 2012
Por Frank el 07 de Octubre de 2012
Por jordano_p el 09 de Octubre de 2012
frank-blog :
No tienes que hacer nada más, solo agregar la función al archivo function.php y editar el ID de la imagen por defecto. Luego Agregas o no imagen en el post y la función hará su trabajo.
Por Angel el 13 de Octubre de 2012
Por jordano_p el 13 de Octubre de 2012
Angel-blog :
Todo en el archivo function.php
Por themanuelrc el 01 de Diciembre de 2012
Por jordano_p el 06 de Diciembre de 2012
Con lo cual para los post importados si no tienen imagen destacada no te queda de otra que agregarla manualmente.
Puedes probar lo siguiente, agrega esta función con el archivo que quieres mostrar por defecto y demás, entra en cada post u publicarlo nuevamente, es posible que tire de la imagen por defecto.
de lo contrario, nada manualmente será la solución.
Por patto el 05 de Febrero de 2013
Por jordano_p el 15 de Febrero de 2013
patto-blog :
Te refieres imagen personalizadas para los post de una categoría? y los distintos tipos de entradas?
Por Edgar A. el 05 de Marzo de 2013
Por Marcos el 16 de Marzo de 2013
Quiero poner un plugin de post relacionados (con imagen) que usa las imagenes destacadas para mostrarlos y no me sirven en el tamaño original, son demasiado grandes.
Tengo más de 2000 post en el blog y nunca he definicod la imagen destacada, así que ya es tarde para hacerlas una por una...
Por macrintosh el 17 de Febrero de 2014
Gracias.
Por MACRI el 17 de Febrero de 2014
Funciona pero...
no se porque me pone como imagen destacada cualquiera al azar de la librería multimedia. No me pone la primera de la misma entrada. Donde estará el error?
Osea a mi me interesa que busque una de la entrada y si no hay en la entrada veo si quiero que ponga una por defecto.
Gracias.
Por Jose Luis el 24 de Junio de 2014
Por Ahiezer el 11 de Marzo de 2015
Saludos.
Por Anto Fernandez el 20 de Junio de 2016
Sólo un apunte, si alguno queréis utilizar este código para los post que ya están publicados no funcionará pero yo con este plugin he podido hacerlo:
https://wordpress.org/plugins/auto-post-thumbnail/