Por estranho que possa parecer, por padrão no WordPress, usuários assinantes não podem ler posts privados. Teve um dia que precisava fazer isso e pesquisei muito até chegar ao plugin do WordPress chamado Members. Ele permite que você possa especificar as permissões de cada nível de usuário (ler, publicar e remover posts, adicionar usuários, etc).
Após instalar o plugin, vá em Usuários > Roles. Na linha do Subscriber (Assinante), selecione a opção Edit. Aparece uma lista enorme de permissões que você pode oferecer para os assinantes. No meu caso, eu apenas selecionei a opção read_private_posts (ler posts privados). Clique em Update Role.
Agora, os usuários assinantes podem ler posts privados, mas os mesmos não estão sendo listados na lista de Posts Recentes… Neste caso, é necessário mexer no código do WordPress em wp-includes/default-widgets.php. No meu caso, na versão 3.3.1 do WordPress, cheguei até a linha 543. A linha filtra os posts que deverão aparecer em Posts Recentes.
$r = new WP_Query(array('posts_per_page' => $number, 'no_found_rows' => true, 'post_status' => 'publish', 'ignore_sticky_posts' => true));
Mantive a mesma linha e adicionei alguns códigos a mais. No caso abaixo, caso algum usuário esteja logado, o filtro irá permitir a exibição de posts privados.
$r = new WP_Query(array('posts_per_page' => $number, 'no_found_rows' => true, 'post_status' => 'publish', 'ignore_sticky_posts' => true));
if (is_user_logged_in()) {
$r = new WP_Query(array('posts_per_page' => $number, 'no_found_rows' => true, 'post_status' => 'publish', 'post_status' => 'private', 'ignore_sticky_posts' => true));
}