SummArg | Cursos y recursos para webmasters

09/03/2011

Código para buscar una imagen en una entrada, soporta YouTube.

En el blog de Vladimir Prelovac publicaron un snippet para obtener la miniatura del adjunto de una entrada. En caso de no encontrar ninguna, busca la URL de la primer imagen posteada (funciona para casos en donde se linkea una imagen de otro servidor). Si tampoco encuentra, busca la miniatura correspondiente a un video YouTube.

El código se inserta en el functions.php

function vp_get_thumb_url($text)
{
  global $post;
  $imageurl="";
  // toma la miniatura del archivo adjunto adjunta
  $allimages =&get_children('post_type=attachment&post_mime_type=image&post_parent=' . $post->ID );
  foreach ($allimages as $img){
     $img_src = wp_get_attachment_image_src($img->ID);
     break;
  }
  $imageurl=$img_src[0];
  // busca la primer imagen que encuentre
  if (!$imageurl)
  {
    preg_match('/<s*img [^>]*srcs*=s*[""']?([^""'>]*)/i' ,  $text, $matches);
    $imageurl=$matches[1];
  }
  // intenta obtener la miniatura de un video youtube
  if (!$imageurl)
  {
    preg_match("/([a-zA-Z0-9-_]+.|)youtube.com/watch(?v=|/v/)([a-zA-Z0-9-_]{11})([^<s]*)/", $text, $matches2);
    $youtubeurl = $matches2[0];
    if ($youtubeurl)
     $imageurl = "http://i.ytimg.com/vi/{$matches2[3]}/1.jpg";
   else preg_match("/([a-zA-Z0-9-_]+.|)youtube.com/(v/)([a-zA-Z0-9-_]{11})([^<s]*)/", $text, $matches2);
   $youtubeurl = $matches2[0];
   if ($youtubeurl)
     $imageurl = "http://i.ytimg.com/vi/{$matches2[3]}/1.jpg";
  }
return $imageurl;
}

Para insertar la imagen obtenida en cualquier plantilla de nuestro theme, debemos insertar dentro de un loop:

global $post;
  $thumb=vp_get_thumb_url($post->post_content);
  if ($thumb!='') echo '<img style=" width:150px;" src="'.$thumb.'" alt="'. get_the_title().'" />';

Dejar un comentario