É possível filtrar comentários em uma postagem para que um usuário possa ver apenas os comentários que escreveu?

8

Sou relativamente novo no wordpress e na codificação e estou trabalhando em um site em que os usuários precisarão deixar comentários para determinadas postagens, mas a pessoa para quem estou construindo o site deseja que o usuário possa apenas ver os comentários que deseja. escreveram para essas postagens específicas, e não para comentários de outros usuários.

Estou pesquisando há algum tempo e não consegui encontrar uma solução que parece funcionar. Existe uma maneira de fazer isso funcionar, que é simples o suficiente para eu implementar? Qualquer ajuda seria muito apreciada.

Obrigado!

Keith Pocock
fonte

Respostas:

2

Assumindo seu comentário autores pretendem ser usuários registrados, a maneira mais fácil é provavelmente usar uma pre_get_commentsação gancho para modificar o WP_Comment_Queryobjeto de user_idconsulta 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_Queryargumento, 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_Querynão possuem um set()método, ao contrário de seu WP_Queryequivalente (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.

bosco
fonte
Oi Bosco, Obrigado pela sua resposta rápida. Você estava certo ao assumir que isso seria para usuários registrados. Desculpe, não esclareço no meu post original. Então, eu não estrago tudo, onde esse código seria colocado? No arquivo comments.php?
amigos estão dizendo sobre keith pocock
1
@KeithPocock Este é um "gancho de ação" - portanto, ele será executado quando precisar, desde que o WordPress processe o código. Você pode colá-lo no functions.phparquivo do seu tema ; no entanto, se um terceiro criar o tema, as alterações poderão ser substituídas quando o tema for atualizado. O melhor lugar para colocar isso é em um novo plug-in - siga a seção "Introdução" do Manual de desenvolvimento de plug-ins (apenas a parte superior da página) para criar um novo arquivo de plug-in e cole a solução na minha resposta abaixo do informações de cabeçalho.
Bosco
Olá Bosco, obrigado pelo esclarecimento. Tentei colocá-lo no arquivo functions.php, mas ele não filtrou os comentários de um usuário específico quando o testei (provavelmente algo que estou fazendo de errado ou não entendendo haha). Desta vez, tentarei como um plug-in e responderemos com quaisquer resultados. Obrigado novamente!
amigos estão dizendo sobre keith
@KeithPocock Oops! Eu encontrei um pequeno bug no meu código - ele deve funcionar em um plug-in ou functions.phpagora (embora, para ser sincero, ainda não o tenha testado). Deixe-me saber como vai!
Bosco