Assumindo seu comentário autores pretendem ser usuários registrados, a maneira mais fácil é provavelmente usar uma pre_get_comments
ação gancho para modificar o WP_Comment_Query
objeto de user_id
consulta var tal que a consulta só retorna comentários do usuário atual:
function wpse262203_restrict_comment_views( $comments_query ) {
// Don't interfere with comment results in the dashboard
if( is_admin() )
return;
$current_user = wp_get_current_user(); // Get the current user
if( $current_user instanceof WP_User && is_user_logged_in() ) {
// The visitor is logged in as a WordPress user...
// If they're an administrator, don't filter the comments
if( in_array( 'administrator', $current_user->roles ) )
return;
// Otherwise, restrict queried comments to those authored by this user.
$comments_query->query_vars[ 'user_id' ] = $current_user->ID;
}
else {
// The visitor isn't logged in - make sure no comments are queried.
$comments_query->query_vars[ 'comment__in' ] = array(0);
}
}
add_action( 'pre_get_comments', 'wpse262203_restrict_comment_views' );
Você também pode usar em current_user_can()
vez de / além de verificar as funções do usuário para personalizar para quem os comentários são filtrados.
Embora você também possa apoiar comentários anônimos usando wp_get_current_commenter()
em conjunto com o author_email
WP_Comment_Query
argumento, isso não é muito confiável ou seguro. Os dados da ID do comentarista anônimo são armazenados nos cookies, o que significa que o usuário pode limpá-los ou os cookies podem expirar. Nesse caso, o usuário não conseguiria visualizar seus comentários até publicar outro. As credenciais também são falsificadas com bastante facilidade - visitantes astutos podem obter acesso a comentários de outros usuários.
EDIT - Por que isso não estava funcionando, anteriormente
Após uma investigação mais aprofundada, minhas tentativas anteriores WP_Comment_Query::set()
de alterar variáveis de consulta falharam porque, na verdade, WP_Comment_Query
não possuem um set()
método, ao contrário de seu WP_Query
equivalente (consulte o ticket nº 39120 ). No entanto, ele possui um __call()
"Método Mágico" , que interceptava a chamada para o set()
método inexistente e retornava falso, impedindo o erro que o PHP normalmente lançaria e me confundindo sem fim.