Mostrando entradas relacionadas sin uso de plugins

  • Autor Autor Snake
  • Fecha de inicio Fecha de inicio
S

Snake

Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Saludos,

Llevo un par de días intentando mostrar 5 entradas relacionadas junto a su correspondiente miniatura sin hacer uso de plugins. Encontre el siguiente código pero no funciona correctamente ya que casi nunca muestra entradas relacionadas... como mucho sólo una. A continuación les dejo el código para ver si me ayudan a realizarle alguna modificación o me recomiendan otro:

PHP:
<?php
  $backup = $post;
  $tags = wp_get_post_tags($post->ID);
  $tagIDs = array();
  if ($tags) {
    $tagcount = count($tags);
    for ($i = 0; $i < $tagcount; $i++) {
      $tagIDs[$i] = $tags[$i]->term_id;
    }
    $args=array(
      'tag__in' => $tagIDs,
      'post__not_in' => array($post->ID),
      'showposts'=>5,
      'caller_get_posts'=>1
    );
    $my_query = new WP_Query($args);
    if( $my_query->have_posts() ) {
      while ($my_query->have_posts()) : $my_query->the_post(); ?>

<!-- aqui se muestra la miniatura -->
<div id="miniatura"><?php
$files = get_children("post_parent=$id&post_type=attachment&post_mime_type=image");
if($files){
		$keys = array_keys($files);
		$num=$keys[0];
		$thumb=wp_get_attachment_thumb_url($num);
		print "<a href='".get_permalink()."' title='".get_the_title()."'><img src='$thumb' class='thumbnail' width='32' height='32' alt='".get_the_title()."' /></a>";
}else{
print "<a href='".get_permalink()."' title='".get_the_title()."'><img src='default.png' class='thumbnail' width='32' height='32' alt='' /></a>";
}
?><!-- aqui se muestra (termina) la miniatura --></div>

<div id="titulomin">
<a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a>
<p><?php the_time('j'); ?> de <?php the_time('F'); ?> de <?php the_time('Y'); ?></p></div>
      <?php endwhile;
    } else { ?>
      <h2>No se encontraron entradas relacionadas.</h2>
    <?php }
  }
  $post = $backup;
  wp_reset_query();
?>

Espero que entre todos podamos encontrar la solución a este problema. Un cordial saludo :smile1:
 
Muy buen aporte, ya lo probare mañana a ver que tal va.

Te pregunto, no necesita un index en la base de datos? ya que podría relentizar bastante el blog y sobrecargas la base de datos.
 
Muy buen aporte, ya lo probare mañana a ver que tal va.

Te pregunto, no necesita un index en la base de datos? ya que podría relentizar bastante el blog y sobrecargas la base de datos.

Por favor, lee bien mi post. Lo he posteado porque no funciona correctamente... No muestra bien los post relacionados. Sobre el tiempo de carga, no he notado nada la verdad y hantes utilizaba un plugin para esta función. Llevo toda la mañana buscando por google tanto en ingles como en español y no he encontrado ninguna solución para esto. Espero que me puedan ayudar. Un cordial saludo
 
A ver ... si te muestra al menos una significa que si funciona. El problema radica en que seguro el código no encuentra la información necesaria para mostrarlas, pues el mismo trabaja usando los tags de Wordpress, por lo tanto si no usas tags en tus posts el código no funcionará bien.

Edito:
También existe la posibilidad de hacerlo por categorías, pero habría que ver como se hacer.

Cordial saludo.
 
Última edición:
Gracias por tu respuesta Fabián. Si utilizo tags por lo que el problema debe estar en el codigo como bien dices. Acabo de encontrar este otro codigo que funciona bien pero no muestra las miniaturas. Intentaré editarlo para que las muestre, si lo consigo lo posteo por aqui:

PHP:
<?php
//para poner en el loop, muestra 5 titulos de post relacionados con la primera tag del post actual
$tags = wp_get_post_tags($post->ID);
if ($tags) {
  echo 'Post relacionados';
  $first_tag = $tags[0]->term_id;
  $args=array(
	'tag__in' => array($first_tag),
	'post__not_in' => array($post->ID),
	'showposts'=>5,
	'caller_get_posts'=>1
   );
  $my_query = new WP_Query($args);
  if( $my_query->have_posts() ) {
	while ($my_query->have_posts()) : $my_query->the_post(); ?>
	  <p><a href="<?php the_permalink() ?>" rel="bookmark" title="Enlace permanente a <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
	  <?php
	endwhile;
  }
}
?>
 
Es fácil agregarle miniaturas, si usas la función the_post_thumbnail de WP, eso sí, debes agregar una a cada post que tengas. Prueba con este código, solo le agregué la función:

PHP:
<?php
//para poner en el loop, muestra 5 titulos de post relacionados con la primera tag del post actual
$tags = wp_get_post_tags($post->ID);
if ($tags) {
  echo 'Post relacionados';
  $first_tag = $tags[0]->term_id;
  $args=array(
    'tag__in' => array($first_tag),
    'post__not_in' => array($post->ID),
    'showposts'=>5,
    'caller_get_posts'=>1
   );
  $my_query = new WP_Query($args);
  if( $my_query->have_posts() ) {
    while ($my_query->have_posts()) : $my_query->the_post(); ?>
      <p><a href="<?php the_permalink() ?>" rel="bookmark" title="Enlace permanente a <?php the_title_attribute(); ?>"><?php the_post_thumbnail(); ?></a></p>
      <?php
    endwhile;
  }
}
?>

Con eso debería ser suficiente, fíjate que sólo cambié el título del enlace por el thumbnail, nada más. Si no funciona, avisa aquí, quiero asegurarme, ya que no lo probé D:

Espero que lo puedas usar y me quedo con este código, lo más probable es que lo use :B
 
Siento mucho responder tan tarde al post. Finalmente he conseguido solucionar el problema. Si un moderador lo cree necesario, puede cerrar el post. Un cordial saludo ^^
 
Atrás
Arriba