
Last week, I shown you how to display your related posts without using a plugin. But what about using a WordPress shortcode, which will allow you to define where the related posts might be displayed?

Last week, I shown you how to display your related posts without using a plugin. But what about using a WordPress shortcode, which will allow you to define where the related posts might be displayed?
To create the shortcode, simply open your functions.php file and paste the shortcode function:
function related_posts_shortcode( $atts ) {
extract(shortcode_atts(array(
'limit' => '5',
), $atts));
global $wpdb, $post, $table_prefix;
if ($post->ID) {
$retval = '<ul>';
// Get tags
$tags = wp_get_post_tags($post->ID);
$tagsarray = array();
foreach ($tags as $tag) {
$tagsarray[] = $tag->term_id;
}
$tagslist = implode(',', $tagsarray);
// Do the query
$q = "SELECT p.*, count(tr.object_id) as count
FROM $wpdb->term_taxonomy AS tt, $wpdb->term_relationships AS tr, $wpdb->posts AS p WHERE tt.taxonomy ='post_tag' AND tt.term_taxonomy_id = tr.term_taxonomy_id AND tr.object_id = p.ID AND tt.term_id IN ($tagslist) AND p.ID != $post->ID
AND p.post_status = 'publish'
AND p.post_date_gmt < NOW()
GROUP BY tr.object_id
ORDER BY count DESC, p.post_date_gmt DESC
LIMIT $limit;";
$related = $wpdb->get_results($q);
if ( $related ) {
foreach($related as $r) {
$retval .= '
<li><a title="'.wptexturize($r->post_title).'" href="'.get_permalink($r->ID).'">'.wptexturize($r->post_title).'</a></li>
';
}
} else {
$retval .= '
<li>No related posts found</li>
';
}
$retval .= '</ul>
';
return $retval;
}
return;
}
add_shortcode('related_posts', 'related_posts_shortcode');
Once done, you can use the following shortcode in your posts to display the related content:
[related_posts]
Thanks to Blue Anvil for this awesome shortcode!
19 Responses
How to display SHORTCODE on SINGLE POST only? and when on Home page the shortcode will not displayed anything
Great shortcode, I’m using it at http://www.ilovecolors.com.ar/ilc-thickbox-wordpress-plugin-to-display-images/
I’ve added a bit of markup and text to the $retval variable.
I like the fact that it is a shortcode so I’m free to apply it whenever I want. However, when I get sometime off I will create a meta checkbox for the sidebar in order to enable/disable related posts for a particular post instead of writing the shortcode.
Jauhari, maybe you could use is_single, to check if you’re in a single post page.
Jauhari, I think you can use if (is_single) {//shortcode here}.
The shortcode have to be pasted in single posts, in the editor in source mode. Not in templates!
Thanks for sharing. There are always situations when we want to share related posts to our visitors, and the way to do it automatically and with shortcode is very useful.
I’ve been using a plugin to do this, but I might have to implement this in my next theme now that I know how to. THanks.
Hi Selinap..
Is that you mean, put this code
if (is_single) {//shortcode here}.
On the post? Did it work?
@Jean-Baptiste Jung
Is it possible to display this shortcode on single post only? and when on the main page the code will be gone?
Thanks
If you build your theme it can be used, otherwise I would use the plugin
Didnt work for me
Just added this snippet to coding cow along with your automatic insert content into editor snippet. Both work really well together and make the entire thing completely painless.
This blog is really my favorite WP development resource! Keep it up!
im loving this blog haha, i was looking for this without the need of a plugin!
Hey how do I make use of the function in a template, i don’t want to type [related_posts] for every article I make
Trackbacks: