Posts relacionados por categorias ou tags no WordPress

Postado em 18 de July de 2009

Caso não se queira usar plugins para retornar uma lista dos posts realcionados em seu blog WordPress, você pode, colocar o código diretamente em seu tema. No geral, você encontra, em vários lugares o código para mostrar os relacionados por tag (a primeira ou a última delas). Mas, se as cotegorias forem mais relevantes? Neste caso, pode-se usar uma adaptação do código.

Se preferir, pode usar um plugin para relacionados por categoria que funciona muito bem, mas, como disse, a idéia aqui não usar plugins.

Posts relacionados por categoria

<?php
$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),
        'showposts'=>6, // Quantidade de itens na lista
        'caller_get_posts'=>1
    );
    $my_query = new wp_query($args);
    if( $my_query->have_posts() ) {
        echo '<h3>Artigos relacionados</h3><ul>';
        while ($my_query->have_posts()) {
            $my_query->the_post();
        ?>
            <li><a href="<?php the_permalink() ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
        <?php
        }
        echo '</ul>';
    }
}
?>

Mas se, o interessante forem as tags, o código é o seguinte:

Artigos relacionados por tags

<?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, // Quantidade de itens na lista
		'caller_get_posts'=>1
    );
    $my_query = new wp_query($args);
    if( $my_query->have_posts() ) {
        echo '<h3>Artigos relacionados</h3><ul>';
        while ($my_query->have_posts()) {
            $my_query->the_post();
        ?>
            <li><a href="<?php the_permalink() ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
        <?php
        }
        echo '</ul>';
    }
}
?>

Esta dica está presente em um monte de blogs, mas para este post, consultei o Bin Blog.