Otro blog más de diseño

En principio esto no sería complicado sabiendo que hay muchos plugins que lo hacen, y en otras muchas webs te explican como hacerlo desde el propio código con funciones.
Pero claro, estos plugins o explicaciones están fundamentados en el uso de la herramienta media del propio wordPress.
Sinceramente, hay algo que no me gusta mucho de esta herramienta, y es que guarda todos los elementos (imágenes, audio, video) en la tabla wp_post de la base de datos, justo donde se guardan los post y las páginas, por lo que si eres amigo de adornar los post con imágenes, esta tabla termina saturada con – a mi entender – contenido innecesario.
Es por eso que utilizo editores externos para la inserción de imágenes, por lo que los que las soluciones para extraer las imágenes de un post no son válidas.
Para esto, se podría crear una función de este tipo, que extraiga todas las imágenes de un post, y seleccione la primera encontrada.
function get_first_image_thumb()
{
// Recuperamos el post
$Html = strtolower(get_the_content());
// Extraemos todas las imagenes
$extrae = '/<img .*src=["\']([^ ^"^\']*)["\']/';
// Extraemos todas las imágenes
preg_match_all( $extrae , $Html , $matches );
// donde
// [1] -> segundo elemento del array "texto/imagenes"
// [0] -> primera imagen del array de "imagenes"
$image = $matches[1][0];
if($image)
{
echo '<div class="entry-thumb"/>
<img src="'.$image.'" alt="" />
</div>';
} else {
return false;
}
}
Eso si, el tamaño de la miniatura ya dependería de vosotros. En mi caso como las imágenes no son muy grandes, modifico su tamaño con css.
Ahora simplemente nos quedaría llamar a esta función en la entrada del blog
<div class="entry">
<?php get_first_image_thumb(); ?>
<?php the_excerpt(); ?>
</div>
Esta función es extrapolable a cualquier otro cms. Simplemente habría que cambiar el valor de la variable “$Html” por el del texto del cuál queramos extraer las imágenes.
Qué puedo decir de mi que no se haya dicho ya antes.
Leonardo
febrero 2nd, 2010 el 11:37 am
Hola. La función funciona de maravillas pero tengo una duda y no se si lo has pensado o ya desarrollado. ¿Cómo extraer la url de todas las imágenes y no sólo de la primera?
cmacias
febrero 2nd, 2010 el 12:42 pm
En principio la función encuentra sólo la primera imagen. Podría modificarse para que pueda encontrar todas. Sería cuestión de echarle un vistazo y ponerse a ello.
Daniel Lemos
mayo 12th, 2010 el 1:24 am
Muchas Gracias! muy bueno!
expresa
noviembre 25th, 2010 el 5:02 pm
Exelente el codigo! me funciono de maravillas…
Solo un temita… parece ser que cuando devuelve la direccion de la primera imagen hay un problema:
Cuando la imagen tiene caracteres en mayusculas, devuelve de todas formas los caracteres con minusculas…. entonces no se muestra la imagen… se puede solucionar?
…/img/DSC_105.jpg (Direccion de la imagen)
…/img/dsc_105.jpg (De esta manera no se ve la imagen)
Gracias!
cmacias
noviembre 25th, 2010 el 5:31 pm
Hola Expresa, gracias por tu comentario.
Si habría una solución. En la línea 4, lo que hago es meter el contenido en una variable y convertirlo todo en minúsculas
$Html = strtolower(get_the_content());
Para evitar que te cambiara los tamaños, simplemente habría que cambiarlo por
$Html = get_the_content();
Un saludo
refrigerator repair
septiembre 19th, 2011 el 8:29 pm
Gracias por resumirlo tan bien. Creo que voy a regresar aquí a menudo. Saludos cordiales.
snake
noviembre 29th, 2011 el 1:07 pm
hola tengo una duda quisiera que me la aclares, esta función extrae la primera imagen del post alojada en un host externo como blogspot?, si es asi comentaste algo que la almacenaria en mi base de datos de los post, eso no me quedo claro, esta función al usar una imagen externa ya no me consumiría transferencia mensual como lo hace la imagen destacada de wordpress verdad??
cmacias
noviembre 29th, 2011 el 1:17 pm
Snake, en principio utilizo un expresión regular para extraer todo tipo de contenido dentro del atributo “src” de la etiqueta “img”, por lo que la respuesta es SI. Con esta función también extraería imágenes alojadas en otro hosting o sistema.
En este caso al ser una imagen externa nos olvidamos de la base de datos, ya que en ella se almacenan las imágenes locales, y en tu caso es una imagen remota.
snake
noviembre 29th, 2011 el 1:26 pm
no funciona bien, no se ven las imagenes de imgur aparece un cartel que no existe pero si existe, no se ven las de blogger tampoco ayuda !!
cmacias
noviembre 29th, 2011 el 1:32 pm
Y lo estás usando sobre un wordpress ? que error te arroja ?
snake
noviembre 29th, 2011 el 2:16 pm
si es un wordpress, el código no me da error, las imagenes no aparecen y las de imgur me dice quen no existe, solo aparecen algunasdigamos un 10% , mi web esta en mi nick
snake
noviembre 29th, 2011 el 2:36 pm
cmacias el error de la imagen era muy extraño estuve pensando y de pronto se me ocurrió que me suceda lo mismo que le pasó a expresa, y efectivamente las imagenes cuya url llevaba mayusculas no se veían o me daban error(no existe), reemplaze la parte 4º del código como lo explicaste arriba y solucionó todo por ahora, es muy efectiva esta función, justo tenía un aumento de transferencía muy alto y ahora puedo comprobar si el aumento era por las imagenes o algo mas.
De todas maneras seguire subiendo la imagen destacada sin emplearlas, me pueden servir en otro momento.
Muy agradecido cmacias, si se me presenta algun problema acudiré a tu web que por cierto la atención es inmediata.
snake
noviembre 29th, 2011 el 2:46 pm
me apresure en despedirme, olvide algo importante yo usaba con la funcion thumbnail varos tamaños para la img destacada dependiendo en que parte esté, para el index yo usaba 214*280, para archivos 100*140 y paginas especiales otra resolución, que debería cambiar ya que hasta el momento solo me muestra una resolución que indique en la funcion:
echo '