Você não pode atribuir recursos a usuários desconhecidos. Se você quiser tornar uma postagem visível para todos, crie um URL separado para essas postagens e adicione um elemento de controle ao editor de postagem para ativar a visualização somente em publicações selecionadas.
Quando um URL desse tipo é chamado, verifique se uma visualização é permitida para a postagem e se a postagem ainda não foi publicada. Verifique também se os mecanismos de pesquisa ignoram esse URL.
Para o URL, usaria um ponto de extremidade :
add_rewrite_endpoint( 'post-preview', EP_ROOT );
Agora você pode criar URLs como…
http://example.com/post-preview/123
… onde 123
é o ID do post.
Em seguida, use um manipulador de retorno de chamada para inspecionar o ID do post, verifique se ele é válido e sobrescreva a consulta principal. Este é provavelmente o único caso de uso aceitável para query_posts()
. :)
Digamos que o endpoint é uma classe T5_Endpoint
(um modelo) e o manipulador de saída é uma classe T5_Render_Endpoint
(uma visualização) que recebe o modelo passado anteriormente. Então, provavelmente há um método render()
chamado em template_redirect
:
public function render()
{
$post_id = $this->endpoint->get_value();
if ( ! $post_id )
return;
if ( 1 !== $this->meta->get_value( $post_id )
or 'publish' === get_post_status( $post_id )
)
{
wp_redirect( get_permalink( $post_id ) );
exit;
}
$query = array (
'suppress_filters' => TRUE,
'p' => $post_id,
'post_type' => 'any'
);
query_posts( $query );
add_action( 'wp_head', 'wp_no_robots' );
}
$this->meta
é outro modelo (classe T5_Post_Meta
) para o valor pós meta que controla se uma visualização é permitida. O controle é definido na caixa Publicar ( ação post_submitbox_misc_actions
), processada por outra visão que recebe a mesma meta-classe.
Portanto,T5_Post_Meta
sabeondeequandoarmazenarometavalor,asvisualizaçõesfazemalgocomele.
Alémdisso,transition_post_status
para excluir o campo de meta-postagem quando a publicação for publicada. Nós não queremos desperdiçar recursos, certo?
Este é apenas um esboço. Há muitos detalhes para cobrir ... Eu escrevi um pequeno plugin que mostra como implementar isso: T5 Public Preview .