Related posts can be easily displayed with plugins, but did you ever wonder how you could display related posts with a Thumbnail without using a Plugin? In this article, we will share two different algorithm which you can use to generate related posts with thumbnails and avoid using any plugin.
Note: We will utilize the built-in WordPress Post Thumbnail Function. So it is best if you implement this.
Related Posts by Tags
WordPress has this amazing taxonomy known as “Post Tags” which you can use. You can tag each of your posts with multiple keywords. This algorithm would find other posts with any one of the tag that the current post has and will list them.
<?php $orig_post = $post;
global $post;
$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),
'posts_per_page'=>5, // Number of related posts that will be shown.
'caller_get_posts'=>1
);
$my_query = new wp_query( $args );
if( $my_query->have_posts() ) {echo '<div id="relatedposts"><h3>Related Posts</h3><ul>';
while( $my_query->have_posts() ) {
$my_query->the_post(); ?><li><div class="relatedthumb"><a href="<? the_permalink()?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_post_thumbnail(); ?></a></div>
<div class="relatedcontent">
<h3><a href="<? the_permalink()?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3>
<?php the_time('M j, Y') ?>
</div>
</li>
<? }
echo '</ul></div>';
}
}
$post = $orig_post;
wp_reset_query(); ?>
The above code is looking at the current post ID and all tags which are associated with it and it uses the wp_query function to look for all other posts that matches any original tag and display them. You can style the post anyway you want them.
Advantage: Most codes on the web cannot be used within the main post loop. Because the related posts are placed right after the main post and above the comments, this code is very helpful. We are saving the current post ID of the main loop and then recalling it at the end of our related posts code. Usually when you don’t do it this way, the two post ID codes gets mixed up and then the comments start acting weird which can break the comments, other plugins related to comments such as numbering system etc. So this code is good and it works.
Usage: Place this code anywhere you like in your single.php and it will work. But most of the time it is placed right above the comments in the main loop.
Related Posts by Category
This algorithm would find other posts within the same category as the current post, and it will list them as related posts. The advantage of this technique is that you will never have a blank spot for your related posts section.
<?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'=> 2, // Number of related posts that will be shown.
'caller_get_posts'=>1
);$my_query = new wp_query( $args );
if( $my_query->have_posts() ) {
echo '<div id="related_posts"><h3>Related Posts</h3><ul>';
while( $my_query->have_posts() ) {
$my_query->the_post();?><li><div class="relatedthumb"><a href="<? the_permalink()?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_post_thumbnail(); ?></a></div>
<div class="relatedcontent">
<h3><a href="<? the_permalink()?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3>
<?php the_time('M j, Y') ?>
</div>
</li>
<?
}
echo '</ul></div>';
}
}
$post = $orig_post;
wp_reset_query(); ?>
This technique utilizes the same functions as the one above except we are just using the different criteria.
If you are creating a new project, or working on a client’s site, this could be very helpful.
Example

Additional Sources:
Creating a Mini Plugin to Show Related Posts via Functions.php






Hi,
This code is amazing! Thank you so much. Is there a way I can make the code show related posts from ANOTHER SITE? So it searches the posts from another site that I show below the post as a related post on my site?
Thanks!
Not using this snippet. You would have to create something more complex for that.
Hi,
I’m using a theme that works with custom posts. I wonder if I try your code, which part should I edit to display just those custom posts instead of the regular posts.
Thanks
Hello – yours is the first tutorial that I found that works but I would like the list vertical. Can you give an example of the CSS for that?
Hey,
I cannot, find the single.php where I have to insert this code.
The problem is that I am using Balance Theme + Genesis. So in the genesis, I can find the Single.php, but it says to “Not Edit Under Any Circumstances”, and I have actually pasted the code in there, but it made my site to stop opening pages at all.
And in the Child Balance Theme, there is no Single.php ….
Any suggestions?
Yes, don’t edit the framework file. You would have to familiarize yourself with Genesis hooks and filters. Then add the code in one of the loop hooks for single page using your functions.php file. Unfortunately, due to the amount of frameworks out there, we can’t possibly cover our tips for all frameworks.
Use Genesis Hooks then put the code in there.
Hello is there any way to change the thumbnail size? i get only one related post and its thumbnail is huge
Yes. You would have to add additional image sizes like this:
http://www.wpbeginner.com/wp-tutorials/how-to-create-additional-image-sizes-in-wordpress/
Hi! this is very useful coding. Is it possible to use this for making a custom page that will show all the posts, like a sitemap but with thumbnails? Something like this:
Category 1
—– related posts code (all posts from that category) ——
Category 2
—– related posts code (all posts from that category) ——
etc. It would make a great showcase for categories with few posts. Thank you for reading and help!
hey, found something here.. I will try that
Hey,
very handy your “Related Posts by Category”.
Sometimes I believe it’s better to have add a raw code rather than use a plugin doesn’t is so expansible…
Thank you!
Is it possible to display the posts horizontal instead of vertical?
Thanks
Yes, you can simply adjust the CSS.
Thank you thank you thank you!! A simple copy paste bit of code that just gets on with it and works – does exactly what it says. This is exactly what I was looking for
Yes, you can use post thumbnails by itself. Not sure why you would want the related feature…
Thanks for the helpful article. I now just added elated posts by using this code.
What if there are no related posts. can it be coded such that it falls back to category related.
hi!
i need some help…
How i can filter.. the category, but if i have parent and child categories and only i show the child post. ex:
- product (all product, this is the parent) (id 104)
– KindOfProducts (subcategory, this is the child) (id 109)
– KindOfProductsTwo (subcategory, this is the child) (id 110)
in products have all post but just need show related from the child: KindOfProducts.
i try whit this:
$args = array(
‘category__in’ => $category_ids,
‘category__not_in’ => 104,
‘post__not_in’ => array($post->ID),
‘orderby’=> ‘rand’,
‘showposts’ => 100,
‘ignore_sticky_posts’ => 1
);
but dont showme nothing…
and i try whit this other one:
$args = array(
‘category__in’ => $category_ids,
‘child_of’ => 104,
‘post__not_in’ => array($post->ID),
‘orderby’=> ‘rand’,
‘showposts’ => 100,
‘ignore_sticky_posts’ => 1
);
and nothing
help? tnks!