post relacionados 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