function user_can_view_post($post_id)
{
$post = get_post($post_id);
if (!$post || is_wp_error($post)) {
return false;
}
if ('inherit' === $post->post_status) {
$parent_post = get_post($post->post_parent);
$post_status_obj = get_post_status_object($parent_post->post_status);
} else {
$post_status_obj = get_post_status_object($post->post_status);
}
if (!$post_status_obj->public) {
if (is_user_logged_in()) {
if ($post_status_obj->protected) {
if (!current_user_can('edit_post', $post->ID)) {
return new WP_Error('unauthorized', 'User cannot view post', 403);
}
} elseif ($post_status_obj->private) {
if (!current_user_can('read_post', $post->ID)) {
return new WP_Error('unauthorized', 'User cannot view post', 403);
}
} elseif ('trash' === $post->post_status) {
if (!current_user_can('edit_post', $post->ID)) {
return new WP_Error('unauthorized', 'User cannot view post', 403);
}
} elseif ('auto-draft' === $post->post_status) {
//allow auto-drafts
} else {
return new WP_Error('unauthorized', 'User cannot view post', 403);
}
} else {
return new WP_Error('unauthorized', 'User cannot view post', 403);
}
}
if (-1 == get_option('blog_public') && !apply_filters('wpcom_json_api_user_can_view_post', current_user_can('read_post', $post->ID), $post)) {
return new WP_Error('unauthorized', 'User cannot view post', array('status_code' => 403, 'error' => 'private_blog'));
}
if (strlen($post->post_password) && !current_user_can('edit_post', $post->ID)) {
return new WP_Error('unauthorized', 'User cannot view password protected post', array('status_code' => 403, 'error' => 'password_protected'));
}
return true;
}