Post relacionados sin Plugins
Escrito el 12 Jun, 2009 por Alexis en General, Wordpress
Como lo pueden notar estoy un poco ausente de Eliseos más que nada por motivos personales, y (sorpresa) estoy diseñando un Theme nuevo para Eliseos.net que estaré presentando la próxima semana.
En el transcurso del diseño necesitaba crear una función que me permita mostrar post relacionados para una entrada, pero con Thumbnails en lugar de los clásicos links.
Si bien ya existen varios plugin que nos permiten hacer esto, siempre estoy buscando la forma de evitar sobrecargar el Blog cuando se puede usar el mismo Core de WordPress.
Con pocas líneas de código se puede lograr algo como esto: (es una versión previa ya que estoy desarrollando el Theme, pero el código es completamente funcional).
Básicamente lo que haremos será insertar un función en el archivo functions.php para que “lea” toda la entrada, busque una imagen (en el caso de que no exista, nos muestre una por defecto) y no devuelva la ruta de la misma.
Luego un poco mas de código, para que compare la entrada con otras teniendo en cuenta los Tags de las mismas, si coinciden en los Tags que se muestre.
Instrucciones:
Abrimos nuestro archivo functions.php e insertamos:
//Cazar la primera imagen del post// function catch_that_image() { global $post, $posts; $first_img = ''; ob_start(); ob_end_clean(); $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches); $first_img = $matches [1] [0]; // No hay imagenes? Bueno, mostrar esta en su lugar if(empty($first_img)){ $first_img = "/images/default.jpg"; } return $first_img; }
Como lo mencione anteriormente, nos devolverá la ruta de la imagen, solo resta envolverla dentro de los Tags correspondientes y tendremos una imagen.
La ruta de la imagen estar representada por:
<?php echo catch_that_image() ?>
Ahora lo que necesitamos es que nos muestre las entradas relacionadas y añadiremos la ruta de la imagen mencionada anteriormente, para eso insertamos estas líneas, por ejemplo en el archivo single.php
<?php $backup = $post; $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'=>6, // Cantidad de entradas a mostrar. 'caller_get_posts'=>1 ); $my_query = new wp_query($args); if( $my_query->have_posts() ) { echo '<h2>Relacionado</h2><ul id="related">'; while ($my_query->have_posts()) { $my_query->the_post(); ?> <li> <a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><img src="<?php echo catch_that_image() ?>" alt="<?php the_title(); ?>" width="70" height="70" /></a></li> <?php } echo '</ul>'; } } $post = $backup; wp_reset_query(); ?>
Nota: la primera y las últimas dos líneas cumplen la función de resetear la query ya que puede interferir con varios plugin o con el mismo loop de WordPress, si tenes problemas, bórralas.
Solo resta aplicarle un poco de formato vía CSS y estaríamos listos!
De esta forma estaremos logrando los mismo resultamos que lograríamos con un plugin, pero de manera casera y artesanal.
Si tenes alguna duda o consulta, no dudes en preguntar.
8 comentarios to “Post relacionados sin Plugins”
Trackbacks/Pingbacks
- Post relacionados sin Plugins
- Tweets that mention Post relacionados sin Plugins | Eliseos.net -- Topsy.com
Dejar un comentario
Additional comments powered by BackType
















Mario |18/7/2009| Site: Who knows?
Me gustaría saber como hiciste para que te quede así, que formato le diste en el css. Estoy pasando un sitio que tengo (www.lavazulada.com.ar) a plataforma wordpress y me gustaría aplicar esto.
Alexis |19/7/2009| Site: eliseos.net
Podes ver y entender mejor el CSS con Firebug (lo cual recomiendo). Este es el CSS para el codigo explicado en al entrada : http://pastie.org/550925
El resto depende de tu Theme, y los mensajes en “Pop-up” estan creadas con jQuery
Suerte
Mario |21/7/2009| Site: lavazulada.com.ar
Alexis, muchísimas gracias por tu pronto respuesta. Es de suma utilidad. Vamos a ver como me sale ya que es mi primer paso en wordpress. Saludos.
psycore |26/3/2010| Site: legendsdesign.co.cc
jajaaj esta bueno esto, es la primera vez q lo veo sin tener q utilizar el yarpp, pero el problema esk q cada vez q intento poner el codigo, se queda en blanco, y tengo q entrar via ftp y borrar las lineas… xD solo lo e intentado en una de mis paginas
MaxorChuck |27/5/2010| Site: maxorchuck.com
oie amigo y hai una forma de tener los articulos relacionados pero sin la imagen porque ando buscando en varios blogs un codigo que me ayude con los articulos relacionados pero todos son los mismos y ese codigo no me funciona
Solo me muestra uno que otro post pero con el que enseñas me da mejores resultados por eso pido tu ayuda con el codigo que das pero que no muestre imagenes solo el texto.
Lucio |4/7/2010| Site: bodaguia.com
Hola!
oye excelente el articulo, de hecho con tus consejos pude adaptar facilmente el sistema a mi blog, y tambien modifique algunas cosas al css para darle diseño, solo me queda una duda ya que stoy aprendiendo apenas PHP, de que forma puedo haceer para que cuando no encuentre articulos relacionados ponga entradas al azar? esto porque tengo algunas entradas que no se relacionan con ninguna.
por tu atencion, Graciaas ! y saludos
Alexis |4/7/2010| Site: eliseos.net
Se tendría que usar un if pa que en casso de que existan post relacionados se use un Loop con post al azar
Lucio |7/7/2010| Site: bodaguia.com
Hola !! oie disuclpa lo que pasa es que no soy nada bueno con el PHP, apenas empiezo y solo se algunas cosas basicas como includes y asi :S
de que manera puedo hacer ese if y ese loop?, es muy dificil?
muchas gracias por responder