A related posts plugin that works quickly even with thousands of posts and tags. Can be added automatically to the end of posts.
There is a problem
with related posts plugins, and Efficient Related Posts is fixing that by
approaching the problem from a different direction and offering a very different
solution.
Basically, current related post plugins build the list of related posts on the
fly when the user needs to view it. Since blogs tend to be viewed far more
often than they are updated (often hundreds of times more often), these queries
are run way more times than they need to be. This not only wastes CPU cycles,
but if the queries are slow (which they will be if you have 1000s of posts and
tags) then the user gets a poor experience from slow page loads.
Efficient Related Posts moves all this effort into the admin section, finding
related posts when a post is saved rather than when the user views it. The
advantage is that if the query is slow it happens less often and the post writer
is the one that waits rather than the user (which I think is WAY better).
There are limitations. For example, since the related posts are stored as post
meta data, we only store a certain number of them (10 by default, but you can
set it to whatever you want). This means that if you decide you need to display
more than 10, you need to have the plugin re-process all posts. I generally
display up to 5 related posts, but store 10 just in case I decide to display
more in some areas. Also, since the related posts are calculated when a post is
saved, manually adding a tag through the database will have no effect on the
related posts, although I recommend not doing that anyway.
You can configure Efficient Related Posts to add related posts automatically in
Settings -> Related Posts. Alternatively you can use the shortcode
[relatedPosts] or the you can use the ‘erp-show-related-posts’ action or
‘erp-get-related-posts’ filter in your theme files.
To use the default settings (from Settings -> Related Posts) you just need to
add [relatedPosts]
to your post or page where you want to list to be. You can
also add some attributes to it such as num_to_display (Number of related posts
to display), no_rp_text (Text to display if there are no related posts), and
title (Title for related posts list, empty for none) like this:
[relatedPosts title="Most Related Post" num_to_display="1"]
[relatedPosts num_to_display="1" no_rp_text="No Related Posts Found"]
[relatedPosts title="Try these related posts:" num_to_display="3" no_rp_text="No Related Posts Found"]
You can use the ‘erp-show-related-posts’ action or ‘erp-get-related-posts’
filter to display a list of related posts in your theme. They need to be used
in “the loop” and the only difference is that the ‘erp-get-related-posts’ filter
returns the list and the ‘erp-show-related-posts’ action echos the list. You
can also pass an associative array of arguments to it such as num_to_display
(Number of related posts to display), no_rp_text (Text to display if there are
no related posts), and title (Title for related posts list, empty for none) like
this:
<?php do_action('erp-show-related-posts', array('title'=>'Most Related Post', 'num_to_display'=>1)); ?>
<?php echo apply_filters('erp-get-related-posts', array('num_to_display'=>1, 'no_rp_text'=>'No Related Posts Found')); ?>
<?php do_action('erp-show-related-posts', array('title'=>'Most Related Posts', 'num_to_display'=>3, 'no_rp_text'=>'No Related Posts Found')); ?>
The theme helper functions still exist, but the new actions and filters
mentioned above are preferred. Hopefully the helper functions will be removed
in the future, so PLEASE don’t use them.
No, Efficient Related Posts finds all the posts related to the one being saved,
and if the current post is more closely related to one of those posts than the
least related post that is currently stored, it re-processes that post. Simple
right? Well, maybe it’s not so simple, but rest assured that your posts can and
will show the posts they are most related to regardless of post date.
Posts are considered related based on tags. This may be extended in the future,
but I wanted to keep the queries as clean as possible.
[relatedPosts]
shortcode as another way to add a list of related posts to a post or pageesc_html
with wp_specialchars
for those still on 2.7.x