Beginner's Guide for WordPress / Start your WordPress Blog in minutes

How to: Related Posts with Thumbnails in WordPress without Plugins

Do you want to display a list of related posts on your WordPress website and prefer to use code rather than a plugin?

When visitors to your blog have finished reading an article they are interested in, offering a list of related posts will keep them engaged and help them to find new content to read.

In this article, we will show you how to display related posts with WordPress using code, with no plugin required.

How to: Related Posts with Thumbnails in WordPress Without Plugins

Why Show Related Pages in WordPress?

When your WordPress blog starts to grow, it can become more difficult for users to find other posts on the same topic.

Displaying a list of related content at the end of each blog post is a great way of keeping your visitors on your website and increasing pageviews. It also helps improve the visibility of your most important pages by displaying your best content where people can easily find it.

If you’re not familiar with code, then you will find it simpler to choose one of the many WordPress related post plugins that can display related posts without code.

But if you’ve ever wondered whether you can display related posts without using a plugin, then we’ll share two different algorithms you can use to generate related posts with thumbnails using code alone:

Note: If you wish to show a thumbnail with each related post, then make sure you first add a featured image to those posts.

Method 1: How to Show Related Posts in WordPress by Tags

One efficient way to locate related content is to look for other posts that share the same tags. Tags are often used to focus on the specific details contained in a post.

With that in mind, you may wish to go ahead and add some common tags to the posts you want to relate to each other. You can enter them in the ‘Tags’ box in the WordPress editor.

The ‘Tags’ Settings Box in the WordPress Editor

After you have added tags to your posts, the next thing to do is to add the following code snippet to your theme’s single.php template. If you need help adding code to your site, then refer to our guide on how to add custom code in WordPress.

$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.
'ignore_sticky_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-&gt;have_posts() ) {
$my_query-&gt;the_post(); ?&gt;
  
<li><div class="relatedthumb"><a href="<?php the_permalink()?>" rel="bookmark" title="<?php the_title(); ?>"><!--?php the_post_thumbnail(); ?--></a></div>
<div class="relatedcontent">
<h3><a href="<?php the_permalink()?>" rel="bookmark" title="<?php the_title(); ?>"><!--?php the_title(); ?--></a></h3>
<!--?php the_time('M j, Y') ?-->
</div>
</li>
<!--?php }
echo '</ul--></ul></div>';
}
}
$post = $orig_post;
wp_reset_query();

This code looks for tags associated with a page and then runs a database query to fetch pages with similar tags.

Where should you place the code? That depends on your theme, but in most cases, you should be able to paste the code into your theme’s single.php template after the main post and right above the comments section.

If you are using the Twenty Twenty-One theme as we are on our demo site, then a good place to paste the code is in the template-parts/content/content-single.php file after the header and just after <?php the_content();.

Related Content by Tags Preview

This will automatically display related content on any WordPress post. You’ll need to change the styling and appearance of your related posts to match your theme by adding custom CSS.

Related Content by Tags Preview

Method 2: How to Show Related Posts in WordPress by Category

Another way to display related content is to list posts that are in the same category. The advantage of this method is that the list of related posts will almost never be blank.

Like Method 1, you need to add a code snippet to your theme’s single.php template. For more details, refer to Method 1 and our guide on how to add custom code in WordPress.

$orig_post = $post;
global $post;
$categories = get_the_category($post-&gt;ID);
if ($categories) {
$category_ids = array();
foreach($categories as $individual_category) $category_ids[] = $individual_category-&gt;term_id;
$args=array(
'category__in' =&gt; $category_ids,
'post__not_in' =&gt; array($post-&gt;ID),
'posts_per_page'=&gt; 2, // Number of related posts that will be shown.
'ignore_sticky_posts'=&gt;1
);
$my_query = new wp_query( $args );
if( $my_query-&gt;have_posts() ) {
echo '<div id="related_posts"><h3>Related Posts</h3><ul>';
while( $my_query-&gt;have_posts() ) {
$my_query-&gt;the_post();?&gt;
  
<li><div class="relatedthumb"><a href="<?php the_permalink()?>" rel="bookmark" title="<?php the_title(); ?>"><!--?php the_post_thumbnail(); ?--></a></div>
<div class="relatedcontent">
<h3><a href="<?php the_permalink()?>" rel="bookmark" title="<?php the_title(); ?>"><!--?php the_title(); ?--></a></h3>
<!--?php the_time('M j, Y') ?-->
</div>
</li>
<!--?php }
echo '</ul--></ul></div>';
}
}
$post = $orig_post;
wp_reset_query();

Now you will see a list of related content at the bottom of each post.

If you want to change the styling and appearance of your related pages, then you will need to add custom CSS to match your theme.

We hope this tutorial helped you learn how to display related posts with thumbnails in WordPress without plugins.

You may also want to learn how to track visitors to your WordPress site, or check out our list of 24 tips to speed up your website.

If you liked this article, then please subscribe to our YouTube Channel for WordPress video tutorials. You can also find us on Twitter and Facebook.

Disclosure: Our content is reader-supported. This means if you click on some of our links, then we may earn a commission. See how WPBeginner is funded, why it matters, and how you can support us.

The Ultimate WordPress Toolkit

Get FREE access to our toolkit – a collection of WordPress related products and resources that every professional should have!

Reader Interactions

180 CommentsLeave a Reply

  1. I do have a question on this: I’m wrestling on the code to capture posts from child categories versus parent categories. Any advice?

  2. I’m trying to use the related posts by category and I noticed that you said the code has to come before the comments in the main loop. In my code I want the related posts to come after the comments in the loop. When I do this I notice my disqus comment plugin takes longer to load now. Is that because of an error with the comments or is that normal?

  3. please

    could someone help a newbie like me customize this script so it’ll display related post in an horizontal way?

    from left to right..

    instead of currently showing it from up to down, vertically…

    • Hey,

      How I did it is I replaced the and codes with my own html and css. The codes create lists for each post, and that is usually in a vertical fashion.

      ——————

      <a href="” rel=”bookmark” title=””> <a href="” rel=”bookmark” title=””>

      ——————

      I replaced the opening with and replaced the closing with as my html tags. Then I write my CSS to fit that specific div class needs on your website. For example, a sample pleft class could look like this:

      .pleft {float:left; padding:2px; margin:10px; width:278px; height:190px;}

      I use the float: selector on my CSS to move posts horizontally, and the margins and padding to give each post spacing within each other. I added in a specific width and height for additional examples.

      Hope this helps.

  4. I’ve got related tags for sure, but when I add the code I see nothing. Also, when I add your code to restrict to a custom post type, it gives me an error. I did change the post type to my specific post type.

  5. @wpbeginner hello

    thanks for your quick answer…

    but i’m a real novice at all you are saying..

    can you please give a litlle exemple?

    for making them horizontal as on your own blog?

    can get in touch by my mail: khiloc at gmail dot com

  6. @subzerokh You would have to edit the styling. It is not that hard. Simply wrap each post in a div. Specify a width for that div and then set a float left property. Adjust the margins and such and you have it.

  7. hello all!! thanks for this wonderfull script!!

    It’s the only thing i found doing exactly what i wanted!!!

    But it’s just showing related post in vertical way (from up to down)

    I would like it to be shown from left to right (horizontally)

    How to do that please??

  8. hey,

    great post! maybe you could help me:

    i have a auto thumb if none is defined,

    if ($thumb_array[‘thumb’] == ”) $thumb_array[‘thumb’] = ‘link to your default thumbnail image’;return $thumb_array;

    now my question is how to define a thumb for each category, which will be used if none is defined at post.

  9. Hi

    thanks for your great post..

    But any change to get posts by categories but not in ul and li and not in thumb..

    I mean full posts show in related posts..just like show on home page, with readmore link.

    thanks

    waiting your reply..

  10. Hi

    thanks for your great post..

    But any change to get posts by categories but not in ul and li and not in thumb..

    I mean full posts show in related posts..just like show on home page, with readmore link.

    thanks

    waiting your reply..

  11. This is great, just what I have been looking for. I wonder though, how could I combine the two above and if there are no tags then it displays posts from the same category?

    Trying to figure this out but not getting very far yet

  12. Thanks for the code it worked but how do I style it. I’d like it to be 4 stories side by side like yours. It is listed one on top of another on my site and not listed like yours.

    • That is CSS. We are not using this code to show related stories. Second, i believe what you are talking about is featured stories on our sidebar. We have written another post about that in our site.

      Admin

  13. is ther a way to dispay the thumbs in related post without using featured images or post thumbs??
    i.e to use any image used in the post …

    • Yes, you can utilize the fallback techniques shared by other developers which pulls the first image from the post. But we recommend using the WordPress post thumbnails…

      Admin

  14. Hi there…Just wanted to say that I’ve been building my wordpress website from the ground up and this code works perfectly for me using WP 3.1….All I need to do now is style the CSS and get some thumbnails happening for the posts. Thanks for your help with the code.

  15. Hi, is there a way to exclude categories? I have two main categories where all the categories get assigned to. The main categories have sub-categories and I would like to show just related posts from the sub-categories.

    Is this possible, by excluding the id’s of the main categories?

    Thanks for your advice!

    BTW…love the code…and it works great!!!

  16. Just one question, is there a way to only pull tags from the same post type? Maybe using something like ‘post_type=videos’?

    • By the way, got this figured out as well:

      Just add it to the array:

      $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,
      ‘post_type’=>’videos’
      );

  17. Hi,

    Thank you for this tutorial. I’m wondering though if there’s anyway the related products can be randomized? I’ve checked different products in the same category and the same related products were shown.

    Thanks

  18. I copied this code and put it in my single.php without changing a thing and nothing gets outputted. Anything wrong with my code? pastebin.com/kg0SkrAg

  19. This doesn’t bring up a thumbnail — there isn’t even a call for an image int eh code. I don’t see how anyone can get this to work.

  20. hey man, I love your blog!

    I have a question?

    Can you do the same trick but ” BY Author” ?

    showing the latest posts by author?

    you will save my life :-)

    Btw thanks for this website!

  21. Thanks for this code! I’ve given it a try and it works somewhat.

    I can get it to give a listing of the related articles, a huge benefit.

    But I can’t seem to get any images to show up.

    The articles have images if this code scrapes.

    I also went in and created images for each post with the custom tag “relatedthumb”. But alas, still no images.

    Is there something else I need to do?

    Many thanks in advance!

    Quinn

  22. I’m trying to modify his code in order to use it with categories within a custom post type. Can anyone help? I’m fairly new to php.

    Thanks!

  23. HI!
    Thanks for this information! This is exactly what I was looking for.
    Is there a way to add an excerpt to this, along with the photo?

    Thanks again for your help!

  24. Thanks for this, exactly what I was looking for! I love how straight to the point your articles are, no confusion.

  25. Thanks for sharing. I’m using this code for a while now but it has a problem: when adding tags to a post, WP sorts them alphabetically regardless of the priority I added them. So this code displays related posts matching the first tag only which are less relevant sometimes.
    Maybe you have an idea how to prevent this auto sorting of tags by WordPress or any other solution?

    • Doug please contact us using the form with a live link example, and we can help. We know this code is working because a few of our client’s site is using it.

      Admin

  26. Great tutorial. Would someone mind showing me a working single.php with this code?

    I’m still learning php.

    Unfortunately
    Parse error: syntax error, unexpected T_ENDIF in C:\xampplite\htdocs\mock\wp-content\themes\scwd\single.php on line 76

  27. Thanks for this article. i am searching for lot of time to show the thumbnails with my article i am unable to perform this. i have tried many wordpress plugin but couldn’t done this. hope this might help me out

Leave A Reply

Thanks for choosing to leave a comment. Please keep in mind that all comments are moderated according to our comment policy, and your email address will NOT be published. Please Do NOT use keywords in the name field. Let's have a personal and meaningful conversation.