The following is a WordPress contributed plugin. You can download it here: Similar Posts Ontology.
Does your website utilize categories and tags? Does it use custom taxonomies? If so, this plugin will find similar content based on all your taxonomies. There are two ways to show related posts within your page.
- The first way to show related content on your post is to use the widget provided. This only works when is_single() is true
- The second way to show similar content on your site is to use the pk_related_return($post->ID); function which can be
called programmatically anywhere you wish!
The Widget included with this plugin gives you the option to limit the amount of posts; it allows you to determine which fields to show: Featured Image, Author, Date, and Excerpt (Title is required); and it allows you to determine which variant of the featured image to show: thumbnail, medium, large, or full. As of version 2.0, you can now decide whether the ‘similar posts’ sorting prefers posts that are newer or posts that were created closer to the date of the post you’re viewing.
If you find the Widget doesn’t meet your needs or is too limiting, you can call the functionality programmatically using this function:
Where $post->ID is the ID of the post for which you are wanting to show related articles.
The $args parameter is an array with the following values available to you (more coming soon):
* posts_per_page (int defaults to 5)
* thumbnail_size (string consisting of one of these values: “thumbnail”, “medium”, “large”, “full”. Defaults to thumbnail).
* sort_prefer (string consisting of one of these values: “newest”, “closest”. Defaults to newest).
An example might be:
$args = array ( 'posts_per_page' => 6, 'thumbnail_size' => 'medium' );
The return value of pk_related_return is an array of objects that includes most of the fields within WordPress’s posts table plus permalink and featured image.
Use with Advanced Custom Fields
At this time, you’ll need to use the embed code method rather than the widget to use Advanced Custom Fields. Lets assume you have a field called “Price Info” (price_info). You can just add this code to your have_posts() loop:
<?php $spo_pp_page = 6; // The amount of posts per page. $similar = pk_related_return($post->ID, array ( 'posts_per_page' => $spo_pp_page )); ?> <ul class="similar-posts"> <?php foreach ($similar as $k => $v) : ?> <li> <div> <span class="similar-title"> <a href=" <?php echo $v->permalink; ?> "> <?php echo $v->post_title; ?> </a> </span> <span class="price_info"> <?php the_field( "price_info", $v->ID ); ?> </span> </div> </li> <?php endforeach; ?> </ul>
Just move the this where you want in the foreach loop:
<span class="price_info"><?php the_field( "price_info", $v->ID ); ?></span>
Allow the user to specify only certain content types (posts, pages, custom) in a request. This would allow you to specify only products get returned, or only blog posts. This would only be an issue if content types share taxonomies.