Thumbnails automáticos para sitios de videos en Wordpress

  • Autor Autor Angel Ortega
  • Fecha de inicio Fecha de inicio
Angel Ortega

Angel Ortega

1
Iota
Diseñador
Verificación en dos pasos activada
Suscripción a IA
Hola compañeros, viendo que muchos tienen problemas con los thumbnais en los themes, quería lanzar un servicio de implementación de thumbnails automaticos, pero pensándolo a conciencia, el script no lo hice yo, por lo tanto no seria bueno lucrar con el, lo tome de un theme de videos premium, aun así si alguien aun siguiendo los pasos no logra colocar correctamente sus thumbnails, o quiere estetizarlos con CSS, yo puedo implementarlo en sus plantillas a un módico precio.

Bueno en fin, este es un excelente script, ya que igual te toma alguna imagen que tengas en tu post, como capturar una imagen de algún video de youtube u otro servidor de videos de este tipo, por lo cual es Excelente para sitios de videos, para que dejen de estarse matando subiendo los thumbnails a mano, si yo hubiese tenido ese código cuando tenia una pagina de videos, quizá no la hubiera vendido, ya que lo que jodía era sacar los thumbnails.

Bueno sin mas choro, vais a meter el siguiente codigo dentro de el Functions.php de vuestro theme.

PHP:
function print_video_thumb_backward($post, &$thumb_url) {
	$video_id = get_post_meta($post->ID, 'vids', true);
	if (! empty($video_id)) {	
			$thumb_url = 'http://img.youtube.com/vi/' . $video_id . '/2.jpg';
			return 1;
	}
}



function print_video_thumb_supported_site($post,&$thumb_url) {
	$content = $post->post_content;
	if (preg_match(video_pattern(),$content, $match)) {
		// video found
		$content = $match[0];
		preg_match('/^\[(\w+)/',$content,$video_type);
		switch ($video_type[1]) {
			case 'youtube':
				preg_match('/v=(.*?)[\s&\[]/',$content,$video_id);
				$thumb_url = 'http://img.youtube.com/vi/' . $video_id[1] . '/2.jpg';
				return 1;
			case 'googlevideo':
				preg_match('/docid=(.*?)[\s&\[]/',$content,$docid);
				$url = 'http://video.google.com/videofeed?docid=' . $docid[1];
    		$data = get_url($url);
				preg_match("/media:thumbnail url=\"([^\"]\S*)\"/siU",$data,$t_url); 
				$thumb_url = $t_url[1]; 
				return 1;
			case 'vimeo':
				preg_match('/\/(\d+)\[/',$content,$docid);
				$url = 'http://vimeo.com/api/clip/' . $docid[1] . '.php';
				$data = get_url($url);
				/* Bypass Vimeo Api problem: http://www.vimeo.com/forums/topic:11826 */
				preg_match('/thumbnail_large"\;s:\d+:"(.*?)"/',$data,$t_url);
				// $thumb_url = $t_url[0]['thumbnail_large'];
				$thumb_url = $t_url[1];
				return 1;
			case 'flv':
				preg_match('/\](.*?)\[/',$content,$url);
				$thumb_url = preg_replace('/\.((flv)|(swf)|(f4v))$/','.jpg',$url[1],1);
				return 1;
			case 'quicktime':
				preg_match('/\](.*?)\[/',$content,$url);
				$thumb_url = preg_replace('/\.mov$/','.jpg',$url[1],1);
				return 1;
			case 'dailymotion':
				preg_match('/\](.*?)\[/',$content,$url);
				$data = get_url($url[1]);
				preg_match('/\.addVariable\("preview",\s*"(.*?)"\)/',$data,$t_url);
				$thumb_url = urldecode($t_url[1]);
				return 1;
			case 'veoh':
				preg_match('/\/watch\/([[:alnum:]]+)[\s&\[]/',$content,$docid);
				$url = 'http://www.veoh.com/rest/video/' . $docid[1] . '/details';
				$data = get_url($url);
				preg_match('/fullHighResImagePath="(.*?)"/', $data, $t_url);
				$thumb_url = $t_url[1];
				return 1;
			case 'viddler':
				preg_match('/id=([[:alnum:]]+)/',$content,$docid);
				$thumb_url = 'http://cdn-thumbs.viddler.com/thumbnail_2_' . $docid[1] . '.jpg';
				return 1;
			case 'metacafe':
				preg_match('/\/watch\/([0-9]+)\//',$content,$docid);
				$thumb_url = 'http://s4.mcstatic.com/thumb/' . $docid[1] . '.jpg';
				return 1;
			case 'blip':
				preg_match('/posts_id=([[:alnum:]]+)/',$content,$docid);
				$url = 'http://blip.tv/rss/flash/' . $docid[1];
				$data = get_url($url);
				preg_match('/<blip:smallThumbnail>(.*?)<\/blip:smallThumbnail>/', $data, $t_url);
				$thumb_url = $t_url[1];
				return 1;
			case 'flickrvideo':
				preg_match('/\](.*?)\[/',$content,$url);
				preg_match('/\/([0-9]+)\/?\[/',$content,$docid);
				$data = get_url($url[1]);
				preg_match('/\.video_thumb_src\s*=\s*\'(\S+)\';/',$data,$t_url);
				$thumb_url = $t_url[1];
				return 1;
			case 'spike':
				preg_match('/\/([0-9]+)\/?\[/',$content,$docid);
				$thumb_url = 'http://dyn.ifilm.com/resize/image/stills/films/resize/istd/' . $docid[1] . '.jpg?width=160';
				return 1;
		}
	}
}

function print_video_thumb_custom_field($post,&$thumb_url) {
	$t = get_post_meta($post->ID, 'video_thumb', true);
	if (! empty($t)) {
		$thumb_url = $t;
		return 1;
	}
}

function print_video_thumb_first_post_image($post,&$thumb_url) {
	$content = $post->post_content;
	if (preg_match('/<img[[:alnum:]\s-_=;:"\/]+src="(.*?)"/',$content, $match)) {
		$thumb_url = $match[1];
		return 1;
	}
}

function print_video_thumb_unsupported_site($post,&$thumb_url) {
	$content = $post->post_content;
	if (preg_match(video_pattern(),$content, $match)) {
		// video found
		$content = $match[0];
		preg_match('/^\[(\w+)/',$content,$video_type);
		switch ($video_type[1]) {
			case 'myspace':
				$thumb_url = get_template_directory_uri() . '/images/thumb_noimage.png';
				return 1;
		}
	}
}

function print_video_thumb($post) {
	print_video_thumb_backward($post,$thumb_url)
	 || print_video_thumb_custom_field($post,$thumb_url)
	 ||	print_video_thumb_supported_site($post,$thumb_url)
	 ||	print_video_thumb_first_post_image($post,$thumb_url)
	 || print_video_thumb_unsupported_site($post,$thumb_url);
	echo get_video_thumb(get_permalink($post->ID), $post->post_title,
					$thumb_url);
}

function get_video_thumb($url,$title,$img) {
	return '<a href="' . $url . '" title="' . $title . '"><img src="' .
		$img . '" alt="' . $title . '" width="90px" height="90px" /></a>';
}

function print_video($post) {
	// Backword compatibility with standard Videographer
	$video_id = get_post_meta($post->ID, 'vids', true);
	if (! empty($video_id)) {
			echo '<div class="vid">';
			wpyoutube('video', $video_id);
			echo '</div>';
			return;
	}
	$content = $post->post_content;
	if (preg_match(video_pattern(),$content, $match)) {
		// video found
		$content = $match[0];
		$content = apply_filters('the_content', $content);
		echo $content;
	}
}

function video_pattern() {
	$pattern = '/
		  (\[youtube(.*?)\[\/youtube\]) 					# YouTube video
		| (\[googlevideo(.*?)\[\/googlevideo\]) 	# Google video
		| (\[vimeo(.*?)\[\/vimeo\]) 							# Vimeo video
		| (\[flv(.*?)\[\/flv\])			 							# Flash video
		| (\[quicktime (.*?)\[\/quicktime \])			# Quicktime video
		| (\[dailymotion (.*?)\[\/dailymotion \])	# Quicktime video
		| (\[veoh (.*?)\[\/veoh \])								# Veoh video
		| (\[viddler\s+([[:alnum:]=&;]+)\])				# Viddler video
		| (\[metacafe (.*?)\[\/metacafe \])				# Veoh video
		| (\[blip\.tv\s+\?([[:alnum:]_=\-&;]+)\])	# Blip.tv video
		| (\[flickrvideo (.*?)\[\/flickrvideo \])	# Flickr Video video
		| (\[spike (.*?)\[\/spike \])							# Spike.com video
		| (\[myspace (.*?)\[\/myspace \])					# MySpace video
		/mx';
	return $pattern;
}

function get_the_content_video($more_link_text = null, $stripteaser = 0, $more_file = '')
{
  $content = get_the_content($more_link_text, $stripteaser, $more_file);
	// remove first video just show in print_video()
	$content = preg_replace(video_pattern(),'',$content,1);
  $content = apply_filters('the_content', $content);
  $content = str_replace(']]>', ']]&gt;', $content);
  return $content;
}

function the_content_video($more_link_text = null, $stripteaser = 0, $more_file = '') {
	echo get_the_content_video($more_link_text, $stripteaser, $more_file);
}

function get_url($url) {
	$fp = fopen( $url, 'r' );
 	$data = "";
 	while( !feof( $fp ) ) {
 		$buffer = trim( fgets( $fp, 4096 ) );
 		$data .= $buffer;
 	}
	return $data;
}

En donde habrá que modificar la siguiente linea para definir el tamaño en pixeles que queramos para los thumbnails.

PHP:
function get_video_thumb($url,$title,$img) {
	return '<a href="' . $url . '" title="' . $title . '"><img src="' .
		$img . '" alt="' . $title . '" [B]width="90px" height="90px"[/B] /></a>';
}

Una vez definido el tamaño que queramos, tendremos que ir a ver en las opciones del escritorio de wordpress , que el tamaño por defecto de los thumbnails no sea menos al que establecimos en el script, de ser así , deberemos ajustarlo, para que nos permita el tamaño que le dimos al script.

Ya por ultimo, tendremos que poner el siguiente código, en el index.php, o single.php, o archive.php, en fin donde queramos que aparezca el thumbnail.

PHP:
<?php print_video_thumb($post) ?>

Para complementar, podemos poner un <?php the_excerpt() ?>, en vez de <?php the_content() ?> para hacer entradas cortas con un "Leer Mas".

Y como cereza del pastel aquí les dejo otro código a meter en el Functions.php, para tener el control de palabras que queramos que se maneje en el excerpt.

PHP:
function new_excerpt_length($length) {
	return 50;
}
add_filter('excerpt_length', 'new_excerpt_length');
function new_excerpt_more($more) {
	return '[..m&aacute;s]';
}
add_filter('excerpt_more', 'new_excerpt_more');

donde "50" es el numero de palabras default, que puedes ampliar o reducir al gusto.

Si te sirvió esta pequeña explicación, no te tientes el corazón y dale al dedito verde 😛 , igual se aceptan donaciones xD

Saludos,
Angel
 
Muy buena informacion men la probare para mis proximos proyectos ^^
 
Excelente!!
 
Me cae como anillo al dedo, lo iba a buscar

¡Si me funciono!
Sirve para imágenes y videos 😉 Excelente
 
@ Pixel, que bueno que te sirvio, la verdad es que es muy bueno, ya que como dices toma tanto imagenes como videos y hace el thumbnail, cosa que no cualquier codigo de estos hace.
 
Gracias por la ayuda que a veces muchos necesitamos...

Quizas un ejemplo o un demo para los que no saben como quedara o que es el thumbail.
 
bueno yo lo uso en Enlace eliminado en las categorias
 
No me genera el thumbnail para los videos

Buenas a todos , primero de todo presentarme , soy frapas y estoy montando una web de videos . El tema de los thumbnails me parecio muy interesante , he copiado todo el codigo aquí mencionado y me genera los thumbnails perfectamente cuando hay una imagen en el post , pero no cuando es un video de youtube que seria lo increible 🙂 .

No se si los videos se han de postear dentro con algun codigo especial de las funciones ya que lo hago metiendo el embeed de youtube . Es correcto?


Muchas gracias de antemano.
 
hola como ya te comente en mp, yo lo tengo provado con el plugin vipers video quicktags y al parecer no funciona con los embed, solamente dentro de etiquetas del tipo [YOUTUBE][/YOUTUBE]

Asi como lo demuestra esta parte del codigo
(\[youtube(.*?)\[\/youtube\]) # YouTube video
| (\[googlevideo(.*?)\[\/googlevideo\]) # Google video
| (\[vimeo(.*?)\[\/vimeo\]) # Vimeo video
| (\[flv(.*?)\[\/flv\]) # Flash video
| (\[quicktime (.*?)\[\/quicktime \]) # Quicktime video
| (\[dailymotion (.*?)\[\/dailymotion \]) # Quicktime video
| (\[veoh (.*?)\[\/veoh \]) # Veoh video
| (\[viddler\s+([[:alnum:]=&;]+)\]) # Viddler video
| (\[metacafe (.*?)\[\/metacafe \]) # Veoh video
| (\[blip\.tv\s+\?([[:alnum:]_=\-&;]+)\]) # Blip.tv video
| (\[flickrvideo (.*?)\[\/flickrvideo \]) # Flickr Video video
| (\[spike (.*?)\[\/spike \]) # Spike.com video
| (\[myspace (.*?)\[\/myspace \]) # MySpace video
/mx';

Por lo que deberas usar el plugin que te digo o algun otro que inserte los videos de ese modo.

Saludos
 
Buenassss , he probado el plugin que me has comentado y perfecto , a la primera . Lo que no se es porque no funcionava al postearle un embeed o el link del video en el post , ya que en las funciones hace una busqueda en el_content () de las expressiones regulares youtube y según he podido comprobar habia coincidencia o sea que lo encontrava pero al pasarle el codigo de video habia algun error.

Ahora me genera ya los dos tipos de thumbnails para imagenes y videos.

Gracias 🙂
 
El problema es que las imagens con acento, ñ, o cualquier caracter especial no se muestran en las miniaturas u.u
 
Gracias por el aporte
 
A mi no me sirvio 🙁
 
no sirve ayuda .. migre mi blog de blogger a wordpress tengo dominio y no me salen las imagenes de mis post ayuda
 
Atrás
Arriba