how to get and display logged in user’s recently read posts

For that you first need to SAVE when someone logged in reads a post. You can do this for instance within an action like get_header.

add_action('get_header','save_single_posts_to_usermeta');

function save_single_posts_to_usermeta(){
   if(is_single() && is_user_logged_in()){
      $user_id = get_current_user_id();
      $read_posts = get_user_meta($user_id,'_read_posts',true);
      $most_recent_read_post = get_user_meta($user_id,'_most_recent_post',true);
      if(!is_array($read_posts)){
         $read_posts = array();
      }
      if(!isset($read_posts[get_the_ID()]){
         $read_posts[get_the_ID()] = 1;
      } else {
         $read_posts[get_the_ID()] = $read_posts[get_the_ID()]+1;
      }
      update_user_meta($user_id,'_most_recent_post',get_the_ID());
      update_user_meta($user_id,'_read_posts',$read_posts);
   }
}

Now, you can easily display it where you need to, for example with shortcodes:

add_shortcode('most_recent_read_post','show_most_recent_read_post');

function show_most_recent_read_post($args=array()){
   if(is_user_logged_in()){
      $user_id = get_current_user_id();
      $last_read_post = get_user_meta($user_id,'_most_recent_post',true);
      if($last_read_post){
         return "Last Read Post:".get_the_title((int)$last_read_post);
      } else {
         return "No posts were read yet!";
      }
   } else {
      return "You must be logged in to view your last read post";
   }
}

add_shortcode('most_read_post','get_most_read_post');

function get_most_read_post($args = array()){
   if(is_user_logged_in()){
      $user_id = get_current_user_id();
      $most_read_posts = get_user_meta($user_id,'_read_posts',true);
      if(is_array($most_read_posts) && (count($most_read_posts) > 0)){
         asort($most_read_posts);
         $number = reset($most_read_posts);
         $post_id = key($most_read_posts);
         return "Your most read post is ".get_the_title($post_id)." (".$number." times)";
      } else {
         return "No posts were read yet!";
      }
   } else {
      return "You must be logged in to view your most read post";
   }
}

Happy Coding, Kuchenundkakao

Leave a Comment