b++ WordPress related articles by tags and/or categories
Here is a quick code snippet for displaying any given number of articles, related first by tags and optionally from the same category. This is by no means definitive solution, but might come in handy as a quick start.
Drop this inside the loop in single.php template, I suggest right behind the the_content() call. See it in action on the live site.
Use it as a base for more advanced features, or simply c/p. It’ll work :)
<?php
$max_articles = 7; // How many articles to display
echo '<div id="related-articles" class="sidebox"><h3>Related articles</h3><ul>';
$cnt = 0;
$article_tags = get_the_tags();
$tags_string = '';
if ($article_tags) {
foreach ($article_tags as $article_tag) {
$tags_string .= $article_tag->slug . ',';
}
}
$tag_related_posts = get_posts('exclude=' . $post->ID . '&numberposts=' . $max_articles . '&tag=' . $tags_string);
if ($tag_related_posts) {
foreach ($tag_related_posts as $related_post) {
$cnt++;
echo '<li class="child-' . $cnt . '">';
echo '<a href="' . get_permalink($related_post->ID) . '">';
echo $related_post->post_title . '</a></li>';
}
}
// Only if there's not enough tag related articles,
// we add some from the same category
if ($cnt < $max_articles) {
$article_categories = get_the_category($post->ID);
$category_string = '';
foreach($article_categories as $category) {
$category_string .= $category->cat_ID . ',';
}
$cat_related_posts = get_posts('exclude=' . $post->ID . '&numberposts=' . $max_articles . '&category=' . $category_string);
if ($cat_related_posts) {
foreach ($cat_related_posts as $related_post) {
$cnt++;
if ($cnt > $max_articles) break;
echo '<li class="child-' . $cnt . '">';
echo '<a href="' . get_permalink($related_post->ID) . '">';
echo $related_post->post_title . '</a></li>';
}
}
}
echo '</ul></div>';
?>
001—2009.06.16.18:36
Nice piece of code for anyone who uses Wordpress. Thanks for sharing it :)