you can allow only registered user to see your content by
1.this solution for post show only to login user
class RavsPublic {
function __construct() {
add_action('pre_get_posts', array($this, 'try_redirect'));
}
function try_redirect( $query ) {
// not on home page and not login
if( !is_home() && !is_user_logged_in() ){
// send them to home page
wp_redirect( home_url() );
exit();
return $query;
}
return $query;
}
}
new RavsPublic();
2)this solution if each post contain a user list ( as post meta ) which can see this post.
//show your content only to registered users
class RavsPublic {
function __construct() {
add_action('pre_get_posts', array($this, 'try_redirect'));
}
function try_redirect( $query ) {
global $current_user;
get_currentuserinfo();
//current user login name
$user = $current_user->user_login;
$allowed_user_list = False;
//if visiter visiting a post
if( $query->query_vars->is_single ){
//retrieve post
$args=array(
'name' => $query->query_vars->name,
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => 1
);
$my_posts = get_posts( $args );
//retrieve post meta which contain allowed user list
$allowed_user_list = get_post_meta( $my_posts[0]->ID, 'allowed_user_list');
//check if user exist in allowed user list
$is_user_allowed = in_array( $user, $allowed_user_list );
}
//redirect visiter to home page if he's not allowed to see this post or not login
if( !is_home() && !is_user_logged_in() && !$is_user_allowed ){
wp_redirect( home_url() ); // doesn't work
exit();
return $query;
}
return $query;
}
}
new RavsPublic();