Some weeks ago i need to create releated post for single.php . After some tries and looking idea in the internet . Here is the plugin idea : find related post based on categories where related post based on post date before the post single which become the center
To do that we need function : is_single , wp_get_post_categories , get_posts , and add_filter for the_content to put related post under content.
Some Notes : to get post ID on single just use global $post , get_posts is used get post based on criterias, wp_get_post_categories to get categories of existing post
Because we need to convert post date we need function strtotime and date in Y-m-d format . Ok here is the full code :
<?php
/*
Plugin Name: ZZ Related Post
Plugin URI: http://www.wpamanuke.com
Description: Sample Related Post based on category
Version: 1.0.1po
Author: WPAmaNuke
Author URI: https://wpamanuke.com
*/
// ADD BOTTOM RELATED ARTICLE ON THE POST SINGLE
function zz_related_post() {
// check if single
if (is_single()) {
global $post;
$post_ids = [];
$prev_post = get_previous_post();
$next_post = get_next_post();
$i = 0;
$post_ids[$i] = $post->ID;
$i++;
if ($prev_post) {
$post_ids[$i] = $prev_post->ID;
$i++;
}
/*
if ($next_post) {
$post_ids[$i] = $next_post->ID;
}
*/
$a = strtotime($post->post_date . " 0 month");
$time = date("Y-m-d",$a);
$cat = wp_get_post_categories($post->ID);
$related = get_posts(
array(
'category__in' => $cat,
'numberposts' => 3,
'post__not_in' => $post_ids,
//'meta_key'=>'_thumbnail_id',
'orderby' => 'DATE',
'order' => 'DESC',
'date_query' => array(
'before' => $time
)
)
);
if ($related) {
echo '<div class="zz-related-post">';
echo '<h3>Related Post</h3>';
foreach( $related as $post ) {
setup_postdata($post);
?>
<div class="zz-related-post_block">
<article>
<?php if ( has_post_thumbnail() ) { ?>
<figure class="zz-related-post_image">
<a class="zz-image-link" href="<?php the_permalink(); ?>" title="">
<?php the_post_thumbnail( 'medium' ); ?>
</a>
</figure>
<?php } ?>
<div class="zz-related-post_title">
<h4 class="zz-meta-title"><a href="<?php the_permalink(); ?>" title=""><?php the_title(); ?></a></h4>
</div>
</article>
</div>
<?php
}
echo '</div>';
}
wp_reset_postdata();
}
}
// End Function Related POST
function zz_after_content($content) {
ob_start();
zz_related_post();
$after_content = ob_get_clean();
$custom_content = $content . $after_content;
return $custom_content;
}
add_filter( 'the_content', 'zz_after_content');
?>
Just see your single post . And Related post will be on the bottom after content.