Mostrar post relacionados por etiquetas o por categorías sin utilizar un plugin
En el repositorio de WordPress existen miles de plugin que amplían las posibilidades de esta plataforma hasta el infinito y más allá, como decía el muñeco. Aún así puede que en ocasiones no te valga la solución disponible entre todo estos plugin, en ese caso te quedan dos opciones, modificar cualquiera de los existentes o crearte tú uno.
Uno de los plugin más utilizados en WordPress puede que sea alguno de los que muestran un listado de post relacionados con las entradas y que suelen situarse al final de cada post.
Este listado de post relacionados toma como base los tags de ese post o las categorías a las que pertenece para crear esa lista relacionada. Si estáis modificando un theme o queréis personalizar ese listado de alguna forma, puede que el código que os dejo a continuación os sirva alguna vez.
Para crear un listado de post relacionados con una entrada del blog sin utilizar un plugin podéis utilizar el siguiente código que tiene en cuenta los tags del post en cuestión:
<?php
$tags = wp_get_post_tags($post->ID);
if ($tags) {
echo '<h3>Post relacionados</h3>';
$first_tag = $tags[0]->term_id;
$args=array(
'tag__in' => array($first_tag),
'post__not_in' => array($post->ID),
'showposts'=>4, //número de post a mostrar
'caller_get_posts'=>1
);
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) {
while ($my_query->have_posts()) : $my_query->the_post(); ?>
<div class="list_post_rela">
<!--imagen post-->
<?php if(has_post_thumbnail()){ ?> <!--comprobamos que existe imagen principal en el post-->
<div class="img_post_rela">
<?php the_post_thumbnail(array(80,80)); ?> //tamaño imagen
</div><?php } ?>
<!--imagen post-->
<li><a href="<?php the_permalink() ?>" rel="bookmark" title="Enlace permanente a <?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
</div>
<?php endwhile;
}
}
?>
Si en vez de tener en cuneta los tags, queréis el listado utilizando las categorías a las que pertenece el post entonces el código sería el siguiente:
<?php
$orig_post = $post;
global $post;
$categories = get_the_category($post->ID);
if ($categories) {
$category_ids = array();
foreach($categories as $individual_category) $category_ids[] = $individual_category->term_id;
$args=array(
'category__in' => $category_ids,
'post__not_in' => array($post->ID),
'posts_per_page'=> 4, // número de post a mostrar
'caller_get_posts'=>1
);
$my_query = new wp_query( $args );
if( $my_query->have_posts() ) {
echo '<div id="related_posts"><h3>Post Relacionados</h3><ul>';
while( $my_query->have_posts() ) {
$my_query->the_post();?>
<li><div><a href="<? the_permalink()?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_post_thumbnail(); ?></a></div>
<div>
<h3><a href="<? the_permalink()?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3>
</div>
</li>
<?
}
echo '</ul></div>';
}
}
$post = $orig_post;
wp_reset_query(); ?>
Fuente| wpbeginner.com | bin-co.com
Acerca de antocara
Creador y administrador de anpStudio. Apasionado de la programación web, el software libre y Wordpress. Me dedico a hacer themes para Wordpress, plugin, y desarrollo web en general, si crees que puedes necesitar de mis servicios puedes ponerte en contacto conmigo a través del formulario de contacto de la web

si me funcionó para Post Relacionados por ETIQUETAS pero por alguna razon al realizarlo por CATEGORIAS no funciona , talves se pueda hacer algo al respecto .
Gracias
Hola, acabo de revisar y utilizar el mismo código que hay en este post en un theme de prueba y me funciona bien. Ten cuidado con los signos de comillas que algunas veces al copiar/pegar se despistan y dan problemas.
Saludos