A simpler approach would be to store a list/array of post-ids of the posts which have been marked read by the user in his user_meta
. Then retrieve this array for every logged-in user, and run the wp_query
using the post__not_in
parameter with the array as the argument.