Alterar o nome de exibição do autor do comentário

Estou tentando alterar o nome do autor do comentário (ou mais especificamente, o autor da revisão em WooCommerce) para o nome Sobrenome inicial ( por exemplo, “John D.” para “John Doe”).

Cheguei lá com o seguinte código em functions.php, mas por algum motivo (talvez por causa de como o comentário / revisão foi enviado), ele tende a deixar o nome em branco e a substituí-lo por um ponto (“.”) em algumas (não em todas) as avaliações.

add_filter("get_comment_author", "my_comment_author", 10, 1); function my_comment_author( $author = "" ) { // Get the comment ID from WP_Query $comment = get_comment( $comment_ID ); if ( empty($comment->comment_author) ) { if (!empty($comment->user_id)){ $user=get_userdata($comment->user_id); $author=$user->first_name." ".substr($user->last_name,0,1)."."; // this is the actual line you want to change } else { $author = __("Anonymous"); } } else { $user=get_userdata($comment->user_id); $author=$user->first_name." ".substr($user->last_name,0,1)."."; // this is the actual line you want to change } return $author; } 

Se eu ajustar o código como este como substituto, no entanto, ele sempre exibirá o nome completo:

add_filter("get_comment_author", "my_comment_author", 10, 1); function my_comment_author( $author = "" ) { // Get the comment ID from WP_Query $comment = get_comment( $comment_ID ); if ( empty($comment->comment_author) ) { if (!empty($comment->user_id)){ $user=get_userdata($comment->user_id); $author=$user->first_name." ".substr($user->last_name,0,1)."."; // this is the actual line you want to change } else { $author = __("Anonymous"); } } else { $author = $comment->comment_author; } return $author; } 

Eu preferiria deixar os nomes reais no banco de dados intacta e apenas filtrar a saída no lado público do site para comentários (podemos precisar que seu nome completo seja exibido em outro lugar, mas não podemos realmente testá-lo até que os autores do comentário sejam exibidos corretamente).

Resposta

Está faltando um “NÃO” operador lógico (!) em sua instrução if. Você quer dizer “se o autor do comentário NÃO ESTÁ vazio”. A partir de agora, a função está lendo que o autor não está vazio e padronizando para sua instrução else que diz a ele para produzir o nome completo do autor. Use o segundo bloco de código, mas faça a seguinte alteração.

Altere o seguinte:

if ( empty($comment->comment_author) ) { 

para:

if ( !empty($comment->comment_author) ) { 

Caso contrário, parece ok para eu.

Comentários

  • OK, funciona muito bem, exceto que alguns nomes ainda aparecem como " Anônimo " mesmo que todas as revisões tenham sido feitas por usuários registrados. Ajustei o código acima para mostrar o nome completo como substituto por enquanto … alguma sugestão?
  • I não testei isso, mas olhando para o códice parece que get_comment () – > user_id assume o valor 0 se enviado por um não usuário. Talvez tente alterar if(!empty($comment->user_id)) para if($comment->user_id > 0)
  • Além disso, você precisa ter certeza de que os usuários estão logados enquanto s omitir os comentários. Se não forem, é meu entendimento que um user_id de 0 será registrado (mesmo se eles usarem as mesmas credenciais). Se você não ' não quiser exigir que eles façam login primeiro, pode ter que escrever uma função simples para verifique se comment_author_email está registrado para um usuário atual. Nesse caso, você obtém o resto dos dados do usuário dessa forma.
  • (^^^ isso não é recomendado, obviamente, pois as pessoas podem enviar comentários disfarçados de outros usuários).

Resposta

Tive o mesmo problema …

Aqui está meu código para isso:

add_filter( "comment_author", "custom_comment_author", 10, 2 ); function custom_comment_author( $author, $commentID ) { $comment = get_comment( $commentID ); $user = get_user_by( "email", $comment->comment_author_email ); if( !$user ): return $author; else: $firstname = get_user_meta( $user->id, "first_name", true ); $lastname = get_user_meta( $user->id, "last_name", true ); if( empty( $firstname ) OR empty( $lastname ) ): return $author; else: return $firstname . " " . $lastname; endif; endif; } 

Ele verifica se há um nome e sobrenome e os exibe. Se não houver, o autor regular é retornado.

Resposta

Hmm, após alguns minutos de depuração e leitura deste tópico , Cheguei à conclusão de que é mais fácil passar pela função get_user_by ()

Então, passei pela função get_user_by("email",$comment->comment_author_email) e conseguiu obter os detalhes do usuário mesmo se o comentário / revisão for enviado sem o usuário estar conectado.

Este é meu código completo

add_filter("get_comment_author", "comments_filter_uprise", 10, 1); function comments_filter_uprise( $author = "" ) { $comment = get_comment( $comment_author_email ); if ( !empty($comment->comment_author_email) ) { if (!empty($comment->comment_author_email)){ $user=get_user_by("email", $comment->comment_author_email); $author=$user->first_name." ".substr($user->last_name,0,1)."."; } else { $user = get_user_by( "email", $comment->comment_author_email ); $author = $user->first_name; } } else { $user=get_userdata($comment->user_id); $author=$user->first_name." ".substr($user->last_name,0,1)."."; $author = $comment->comment_author; } return $author; } 

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *