Como agregar post relacionados con thumbnails en wordpress sin usar plugin

on Miércoles, marzo 23, 2011 in Tutorial by with 22 comments



Como agregar post relacionados con thumbnails en wordpress sin usar plugin

En un tutorial pasado vimos como agregar post relacionados en tu theme. Ahora traigo pero usando imágenes o thumbnails.

Para poder mostrar los post relacionados debajo de cada entrada necesitaremos de algunas librerías y unas cuantas funciones.

Carpetas y archivos necesarios.

Creación de la carpeta scripts

Para empezar creamos la carpeta /scripts/ dentro de nuestro theme. /mi-theme/scripts/, es aqui en donde añadiremos las librerias necesarias.

jQuery

La primer libreria que necesitaremos es la libreria de jQuery. Existen varias formas de mandar a llamar esta libreria pero la mejor manera es mandar a llamar la que trae wordpress integrada lo unico que debemos de hacer es insertar el siguiente codigo.
<?php wp_enqueue_script("jquery"); ?>
En dentro del archivo header.php justo antes de <?php wp_head(); ?>

TimThumb

Otra librería que usaremos es la de timthumb.php esta libreria redimenciona las imagenes al tamaño que queramos, aunque wordpress ya tiene la opcion de hacer thumbnail o imagenes destacadas, esta libreria nos puede ser util si la imagen o thumbnail la pasamos por medio de campos personalizados o para redimencionar la primer imagen del post como lo veremos mas a delante.

para usar timthumb.php debemos descargarla y copiarla a la carpeta de /mi-theme/scripts/, la libreria de timthumb.php usa una carpeta llamada /cache/ la que debe estar junto al archivo.

NOTA: yo voy a renombrar la libreria timthumb.php a thumb.php para que sea mas facil de usar.

Para este paso debemos de tener dentro de la carpeta scripts los siguientes archivos.

/mi-theme/scripts/thumb.php (libreria thimthumb.php renombrada a thumb.php)
/mi-teme/scripts/cache/ (asegurate que la carpeta cache tenga todos los provilegios 777)

hovertip

La librería hovertip es la que mostrara el titulo de los post relacionados de forma flotante.
Para usar hovertip debemos descargarla de los repositorios de jquery jquery.hovertip-1.0_0.zip. De este archivo solo usaremos los archivos jquery.hovertip.min.js y jquery.hovertip.css.

EL archivo jquery.hovertip.min.js lo copiamos dentro de la carpeta /scripts/ mientras que el archivo jquery.hovertip.css lo copiamos dentro de la carpeta de nuestros css.

/mi-theme/scripts/jquery.hovertip.min.js
/mi-theme/css/jquery.hovertip.css

Hasta aquí debernos tener la siguiente estructura en nuestros archivos.

/mi-theme/thumb.php
/mi-teme/cache/
/mi-theme/scripts/jquery.hovertip.min.js
/mi-theme/css/jquery.hovertip.css

Función thumb_pots

Para poder obtener la primer imagen del post (por si alguna entrada no tiene imagen destacada o alguna imagen que se pase por campo personalizado) necesitaremos la función thumb_pots().

Dentro del archivo functions.php copiamos el siguiente código.

<?php
/*
    optener la primer imagen del post
*/
function thumb_pots(){
    global $wpdb, $post;
    $image = "";
    $first_image = $wpdb->get_results(
    "SELECT guid FROM $wpdb->posts WHERE post_parent = '$post->ID' "
    ."AND post_type = 'attachment' ORDER BY `post_date` ASC LIMIT 0,1"
    );

    if ($first_image) {
        $image = $first_image[0]->guid;
    }
    return $image;
}
?>

Creación del archivo post-relacionados.php

Este archivo es el que hará la lista de post relacionados basándose en las etiquetas, es similar al del articulo como agregar post relacionados en tu theme pero con algunas modificaciones.

Dentro de la carpeta de nuestro theme /mi-theme/ creamos un nuevo archivo con el nombre post-relacionados.php y pegamos el siguiente codigo:

<?php
$tags = wp_get_post_tags($post->ID);
if ($tags) {
	$tag_ids = array();
	foreach($tags as $individual_tag) $tag_ids[] = $individual_tag->term_id;

	$args=array(
		'tag__in' => $tag_ids,
		'post__not_in' => array($post->ID),
		'showposts'=>5, // Number of related posts that will be shown.
		'caller_get_posts'=>1
	);
	$my_query = new wp_query($args);
	echo '<h4>Articulos Relacionados</h4><ul>';
	if( $my_query->have_posts() ) {
		while ($my_query->have_posts()) {
			$my_query->the_post();
		?>
		<li>
			<a class="postRelatedThumb" href="<?php the_permalink() ?>" rel="bookmark nofollow">
				<?php
                                  /* Aquí empieza el código añadido*/
				$imageThumb=thumb_pots(); // Aquí manda a llamar la función que obtiene la primer imagen de la entrada
                                             /* Cambia el valor de custom-field por la del nombre de tu campo personalizado  */
				$imagevalue=get_post_meta($post->ID, "custom-field", $single = true);
				if ((function_exists('has_post_thumbnail')) && (has_post_thumbnail())) {
                                      /* Aqui entra si el post tiene una imagen destacada                                       El thumbnail sera de 100 x 100 px y se le añade un array mas para cambiar el atributo de title */
					the_post_thumbnail(array( 100,100 ), array("title"=>""));
				}elseif($imagevalue){
                                 /* Aqui entra si el post no tiene imagen destacada, pero si tiene una imagen por ca,po personalizado   */
                                ?>
				<img class="wp-post-image" src="<? bloginfo('template_directory');?>/scripts/thumb.php?src=<? echo $imagevalue; ?>&w=100&h=100&zc=1" alt="<? the_title(); ?>" />
				<?php }elseif($imageThumb){
                                    /* Aqui entra si no tiene ninguna imagen por campo personalizado pero si contiene una imagen la entrada */
                                ?>
				<img class="wp-post-image" src="<? bloginfo('template_directory');?>/scripts/thumb.php?src=<? echo $imageThumb; ?>&w=100&h=100&zc=1" alt="<? the_title(); ?>" />
				<?php }else{
                                    /* Si la entrada no tiene ninguna imagen entonces pone una por default que se encuentra en /images/default.jpg */
                                ?>
				<img class="wp-post-image" src="<? bloginfo('template_directory');?>/images/default.jpg" width="100" height="100" alt="<? the_title(); ?>" />
				<?php } ?>
			</a>
			<div class="hovertipContent"><?php the_title();?></div>
		</li>
		<?php
		}
	}else {
		echo '<li>No hay contenidos relacionados</li>';
	}
	echo '</ul>';
}
 wp_reset_query();
?>

Insertando los post relacionados en la entrada.

Para que nos muestre los post relacionados de cada entrada debemos de mandar a llamar el archivo post-relacionados.php desde el archivo single.php.

Justo después de

 <?php the_content(); ?>

Insertamos el siguiente codigo:

<div class="post-relacionados">
<?php include (TEMPLATEPATH . '/post-relacionados.php'); ?>
</div>

Editando style.css

Para que las imágenes de los post relacionados los muestre de una manera un poco ordenada debemos usar estilos que nos ayuden a darle forma a la tira de imágenes.

.post-relacionados ul li a img.wp-post-image{
	float:left;
	margin:10px;
	padding:0;
	border:2px solid #d0d0d0;
}
.post-relacionados ul li a:hover img.wp-post-image{
	border:2px solid #333;
}

Con esto debe de ser suficiente para darle forma a la tira de imágenes. Ahora si quieres personalizar el hovertip el archivo a modificar es /css/jquery.hovertip.css

Por ultimo editamos las cabeceras y para activar hovertip

En el archivo header.php justo despues de wp_head(); añadimos el siguiente código.

<?php if(is_single()){?>
		<link rel="stylesheet" href="<?php bloginfo('template_directory'); ?>/css/jquery.hovertip.css" type="text/css" media="screen" />
		<script type="text/javascript" src="<?php bloginfo('template_directory'); ?>/scripts/jquery.hovertip.min.js"></script>
		<script type="text/javascript">
				$(document).ready(function(){
					$('.postRelatedThumb').hovertip();
				});
		</script>
	<?php } ?>

El código esta dentro de una condición que solo permitirá que cargue las librerías de hovertip en el archivo single.php, osea cuando muestre la entrada completa.

Resultado final

El resultado final podría ser algo parecido a:

Post relacionados con imágenes sin usar plugin

(únicamente en la tira de imágenes)

Conclusión

Espero que les aya servido de mucho este tutorial lo he tratado de hacer lo mas cencillo posible y si tienen alguna duda o observación no duden en hacérmelo saber.

Tags: , , , , , ,

22 Responses.

Pingbacks/Trackbacks

  1. Información Bitacoras.com…

    Valora en Bitacoras.com: Tweet En un tutorial pasado vimos como agregar post relacionados en tu theme. Ahora traigo pero usando imágenes o thumbnails. Para poder mostrar los post relacionados debajo de cada entrada necesitaremos de algunas librería……

Comments

  1. Schubert dice:

    Muy buena explicacion voy a ver si la puedo implementar en mi blog,saludos y gracias por compartir

  2. Franco dice:

    Cual sería la manera de hacer esto si esque yo uso varios single para cada categoría, no sÉ si me explico. Lo que sucede es que yo en la carpeta /mi-theme/ tengo single1.php , single2.php y en single los llamo según la categoría. Ojala me puedas ayudar esto está muy interesante. Saludos y gracias por compartir esto (Y)

    • David Chay dice:

      No hay problema solo tienes que agregar el archivo post-relacionados.php a cada single y listo.

      Tienes que hacer lo mismo en cada archivo single y debe de funcionar sin ningún problema.

      Saludos y gracias por visitar la pagina

      • Franco dice:

        Nuevamente yo molestando XD.
        Lo he probado pero primero que ha salido un error, tal parece parece que existe 2 cositas que hay que cambiar.
        1) En el archivo post-relacionados.php en la linea 43 en lugar de hovertipContent poner solo hovertip asi es el nombre del estilo verificar en /mi-theme/css/jquery.hovertip.css
        2)En el codigo que se pone en el single.php en la linea se debe poner un slash “/” justo antes de post-relacionados.php

        Ahora una vez que ya me ha salido todo tengo un problema, tal parece que el hovertip no se está activando , mira como me sale http://img30.imageshack.us/img30/9743/pruebahv.png ojalá me puedas ayudar , ahí si tendria todo completo, puse el codigo en el header y nada , nose que pasa.

  3. 3nd3r dice:

    Hola!
    Me gustaría combinar lo que comentas en este post con lo que comentas en este otro: http://www.wordpressenaccion.com/como-agregar-campos-personalizados-al-post-y-paginas-automaticamente.html y así usando el siguiente código:

    add_action(‘publish_post’, ‘add_custom_field_automatically’);

    function add_custom_field_automatically($post_ID) {
    global $wpdb;
    if(!wp_is_post_revision($post_ID)) {
    add_post_meta($post_ID, ‘featured’, ‘image URL’, true);
    }
    }

    Pueda añadir automáticamente a todos los posts el campo personalizado “featured” y como su valor (‘image URL’), la correspondiente a la URL de la imagen que acompañe al post…

    Me ayudas?
    Muchas gracias por tu tiempo…

  4. alvaro dice:

    Hola,

    Muy buen post, me ha venido muy bien, lo unico es que me gustaría saber como añadir debajo de cada imagen el titulo o una parte del texto.

    Gracias

  5. TukoMaxter dice:

    hola e instalado todo a la perfección pero me ha surgido un problema, no me salen las letras al pasar el cursor sobre la imagen, solo se ve la imagen, te agradecería tu ayuda

  6. TukoMaxter dice:

    como verifico eso, puedes ayudarme?

  7. TukoMaxter dice:

    no hay problema, sera despues, gracias y un saludo

  8. jhon mario dice:

    Gracias por este script, lo he implementado en mi blog pero no me muestra imágenes, solo el texto, aunque para mi está bien así, me gustaría saber en dónde está la falla para no quedarme con la duda.

  9. TukoMaxter dice:

    Hola, no encuentro la forma para que me muestre el texto al pasar el cursor, por favor échame una mano, Saludos!

Leave a Reply

*

*

*